我正在编写一个Ember插件,它提供了一些未通过app//strong>文件夹公开的服务。
// 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) 在注册service:foo
的伪应用程序中创建初始化程序
// tests/dummy/app/initializers/account-data.js
import FooService from 'foo/services/foo'
export function initialize(application) {
application.register('service:foo', FooService);
}
编辑结果我做不到。这并不是说moduleFor助手试图找到"service:foo",而是试图将"app/services/foo"注册为"service:foo"。所以提前注册"service:foo"并没有帮助。
3) 不要使用moduleFor助手。
编辑我这样说的意思是"Andy Pye的回答"。但如果能够使用moduleFor助手,那就太好了。。。特别是对于模型,因为我需要访问
store
。
编辑事实证明,模型变得更加复杂,因为我无法直接创建它们。因此,如果我不使用moduleFor
辅助对象,我需要一个而不是store
对象。。。
我刚刚遇到了同样(或非常相似)的问题。我发现这似乎有效:
// 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);
});