将角种子茉莉花单元测试转换为咖啡脚本
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 单元测试中加载