将角种子茉莉花单元测试转换为咖啡脚本

Posted

技术标签:

【中文标题】将角种子茉莉花单元测试转换为咖啡脚本【英文标题】:Converting angular-seed jasmine unit tests to coffeescript 【发布时间】:2013-12-29 12:13:23 【问题描述】:

作为练习,我正在尝试将 angular-seed 存储库中包含的业力单元测试从 js 转换为咖啡脚本。特别是,我遇到了tests/unit/directivesSpec.js 测试集的问题,它定义了一个简单的价值服务。这是我的咖啡脚本代码:

 1  describe 'directives', ->
 2  beforeEach module 'myApp.directives'
 3  
 4  describe 'app-version', ->
 5    it 'should print current version', ->
 6      module ($provide) ->
 7        $provide.value 'version', 'TEST_VER'
 8      inject ($compile, $rootScope) ->
 9        element = $compile('<span app-version></span>')($rootScope)
10        expect(element.text()).toEqual 'TEST_VER'

当咖啡脚本代码围绕6 行编译时似乎出现了问题,如下所示:

module(function($provide) 
  return $provide.value('version', 'TEST_VER');
);

并导致我的测试因错误而失败:

Error: [ng:areq] Argument 'fn' is not a function, got Object
http://errors.angularjs.org/1.2.4/ng/areq?p0=fn&p1=not%20a%20function%2C%20got%20Object
    at /Data/src/ngfrontend-seed/app/vendor/angular/angular.js:78:12
    at assertArg (/Data/src/ngfrontend-seed/app/vendor/angular/angular.js:1358:11)
    at assertArgFn (/Data/src/ngfrontend-seed/app/vendor/angular/angular.js:1368:3)

如果我删除 return 语句,测试运行良好。参考example in the documentation,尚不清楚模块函数接受什么作为返回值,但return 语句似乎破坏了一些东西。

关于如何解决这个问题的任何想法,或者在编写测试规范时坚持使用纯 javascript 是否明智?

【问题讨论】:

我认为你应该在这里提供原始的js代码。 JS 有一个隐式返回 (***.com/questions/17337064/…),所以我想看看原始代码,看看返回了什么。 【参考方案1】:

Coffeescript 隐式返回每个函数的最后一个表达式。 但是你可以像这样添加一个显式的空返回语句:

6      module ($provide) ->
7        $provide.value 'version', 'TEST_VER'
8        return

将编译为:

module(function($provide) 
  $provide.value('version', 'TEST_VER'); //without return
);

有关更多信息,另请参阅thread。

【讨论】:

以上是关于将角种子茉莉花单元测试转换为咖啡脚本的主要内容,如果未能解决你的问题,请参考以下文章

茉莉花匹配器功能未在 angularjs/karma 单元测试中加载

带有茉莉花的AngularJS 2单元测试组件面临错误,无法读取null的属性'firstChild'

typescript 简单的茉莉花单元测试,测试基本功能

单元测试茉莉花@NGRX/DATA

reactjs中组件的单元测试功能使用业力和茉莉花

如何在茉莉花中为可观察的 finally 块编写单元测试 - Angular 2