Ember插件:为我的插件文件夹中的文件编写单元测试



我正在编写一个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);
});

相关内容

  • 没有找到相关文章

最新更新