作为练习,我试图将angular-seed
回购中包含的业力单元测试从js转换为coffee脚本。特别是,我在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
语句,则测试运行正常。参考文档中的示例,尚不能立即清楚模块函数接受什么作为返回值,但是该return
语句似乎在破坏事情。
有关如何解决此问题的任何想法,还是在编写测试规范时坚持使用纯JavaScript?
Coffeescript隐式返回每个函数的最后一个表达式。
但是您可以添加一个明确的空return语句,如下所示:
6 module ($provide) ->
7 $provide.value 'version', 'TEST_VER'
8 return
它将编译为:
module(function($provide) {
$provide.value('version', 'TEST_VER'); //without return
});
另请参见此线程以获取更多信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句