将角种子茉莉花单位测试转换为coffeescript

时间:2013-12-11 13:33:19

标签: angularjs coffeescript jasmine karma-runner

作为练习,我试图将angular-seed repo中包含的业力单元测试从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是明智的吗?

1 个答案:

答案 0 :(得分:4)

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

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

将编译为:

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

有关更多信息,请参阅此thread