我正在编写一个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
对象......
答案 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);
});