Ember Addon:为我的插件文件夹

时间:2016-07-26 17:54:05

标签: unit-testing ember.js ember-qunit

我正在编写一个Ember Addon,它提供了一些未通过 app / 文件夹公开的服务。

// project Foo
// addon/services/foo.js
import Ember from 'ember';
export default Ember.Service.extend({})

Ember CLI生成的单元测试使用 moduleFor 帮助程序。

// tests/unit/services/foo.js
import { moduleFor, test } from 'ember-qunit';

moduleFor('service:foo', 'Unit | Service | foo', {
  // Specify the other units that are required for this test.
  // needs: ['service:foo']
});

// Replace this with your real tests.
test('it exists', function(assert) {
  let service = this.subject();
  assert.ok(service);
});

问题是,由于我的FooService未通过 app / 文件夹公开, moduleFor 帮助程序无法使用 service:foo 名称找到它。

在这里对我的服务进行单元测试的最佳方式是什么? 我可以看到三种可能性:

1)添加导出FooService的tests/dummy/app/services/foo.js

// tests/dummy/app/services/foo.js
export { default } from 'foo/services/foo.js';

2)在虚拟app中创建初始化器,注册service:foo

// tests/dummy/app/initializers/account-data.js
import FooService from 'foo/services/foo'
export function initialize(application) {
  application.register('service:foo', FooService);
}
  

修改   结果我不能这样做。不是那个模块帮助者试图找到'service:foo'而是试图将'app / services / foo'注册为'service:foo'。因此,提前注册'service:foo'并没有帮助。

3)不要使用 moduleFor 帮助器。

  

修改   通过这个我的意思是@Andy Pye的回答。但是能够使用 moduleFor 帮助器会很好...特别是对于模型,因为我需要访问store

修改 事实证明它对于模型来说变得更加复杂,因为我不能直接创建它们。因此,如果我不使用moduleFor帮助器,我需要一个而不是store对象......

1 个答案:

答案 0 :(得分:1)

我刚才有同样(或非常相似)的问题。我发现这似乎有效:

// tests/unit/services/foo.js
import { module, test } from 'ember-qunit';
import FooService from 'Foo/services/foo';

module('Unit | Service | foo', {
    // Specify the other units that are required for this test.
    // needs: ['service:foo']
});

// Replace this with your real tests.
test('it exists', function (assert) {
    let service = FooService.create();
    assert.ok(service);
});