作为练习,我尝试将 angular-seed
存储库中包含的 karma 单元测试从 js 转换为 coffee 脚本。特别是,我遇到了 tests/unit/directivesSpec.js
测试集的问题,它定义了一个简单的值(value)服务。这是我的 CoffeeScript 代码:
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'
CoffeeScript 代码在 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 是否明智?
最佳答案
Coffeescript 隐式返回每个函数的最后一个表达式。
但是您可以像这样添加一个显式的空返回语句:
6 module ($provide) ->
7 $provide.value 'version', 'TEST_VER'
8 return
将编译为:
module(function($provide) {
$provide.value('version', 'TEST_VER'); //without return
});
另见 thread了解更多信息。
关于angularjs - 将 angular-seed jasmine 单元测试转换为 coffeescript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20520548/