如何将sinon导入ember-cli测试?

时间:2015-05-04 20:29:18

标签: ember.js ember-cli sinon ember-cli-addons

我正在尝试在我的ember-cli应用程序中使用sinon,我无法弄清楚如何导入它。我在规范中有一个import语句:

import { sinon } from 'sinon';

然后我尝试在测试中使用sinon:

it('finds the todo model', function () {
  var store = this.subject().store;
  var spy = sinon.spy(store, 'find');

  this.subject().model();

  expect(spy).to.have.been.called;
});

但是,当我从命令行运行ember test时,我收到此错误:

not ok 8 PhantomJS 1.9 - TestLoader Failures my-app/tests/unit/routes/application-test: could not be loaded
---
    message: >
        Could not find module `sinon` imported from `my-app/tests/unit/routes/application-test`
    stack: >
        Error: Could not find module `sinon` imported from `my-app/tests/unit/routes/application-test`
            at requireFrom (http://localhost:7357/assets/vendor.js:119)
            at reify (http://localhost:7357/assets/vendor.js:106)
            at http://localhost:7357/assets/vendor.js:149
            at tryFinally (http://localhost:7357/assets/vendor.js:30)
            at http://localhost:7357/assets/vendor.js:156
            at http://localhost:7357/assets/test-loader.js:29
            at http://localhost:7357/assets/test-loader.js:21
            at http://localhost:7357/assets/test-loader.js:40
            at http://localhost:7357/assets/test-support.js:13918
    Log: >
...

我注意到的一件事是ember-sinonbower_components/目录中的占用空间非常小:

$ls bower_components/sinon/
index.js

我尝试将导入行更改为import { sinon } from 'sinon/index';,但这也没有用。

非常感谢任何帮助。我对ember-cli,bower和es6模块非常陌生,因此非常感谢那些链接到背景。谢谢!

1 个答案:

答案 0 :(得分:1)

好的,在RTFMing几分钟之后,我在ember-cli文档的test assets部分找到了答案。

设置:

ember install ember-sinon

^这会抛出错误,所以我手动运行了发电机。

ember generate ember-sinon

然后,在Brocfile

中导入sinon
var isProduction = EmberApp.env() === 'production';
if (!isProduction) {
  app.import(app.bowerDirectory + '/sinon/index.js', {type: 'test'});
}

现在,您可以在规范中使用sinon.stub/spy/mock但是仍然会收到有关未定义sinon的jshint错误。我通过添加:

来修复此问题
/* global sinon */

到规范的顶部。看起来你应该能够在jshintrc文件中全局声明它,但我还没想到它。