angularjs - 将 angular-seed jasmine 单元测试转换为 coffeescript

标签 angularjs coffeescript jasmine karma-runner

作为练习,我尝试将 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/

相关文章:

javascript - 使用私有(private)变量的 Jasmine 测试函数

javascript - 自动刷新 .filter() 范围

javascript - 如何取消setInterval函数?

javascript - JQuery 无法与我的 Rails 3.2 项目一起启动/工作

javascript - 我可以使用 AngularJS 来处理和加载我的对象吗

javascript - Jasmine ——测试 promise 。如何在回调中测试函数?

javascript - $state.go() 运行没有错误,但实际上不适用于 Ionic

javascript - Javascript 中范围 (31-40) 字符串的 parseInt

node.js - 在 Node.js 中等待满足条件

javascript - 如何在 Angular 指令的 Jasmine 单元测试中触发点击事件?