如何使用qunit在Ember单元测试中依赖商店作为服务?

时间:2015-04-20 19:40:33

标签: ember.js ember-data ember-cli ember-qunit

根据ember-data 1.0.0-beta.16版本TweetComposerComponent = Ember.Component.extend({ store: Ember.inject.service() }); 的{​​{3}},商店现在可以用作服务:

qunit

但是,我无法弄清楚如何对这样的组件进行moduleForComponent('tweet-composer', { needs: ['service:store'] }); 单元测试。我尝试了以下内容:

moduleForComponent('tweet-composer', {
  needs: ['store:main']
});

Attempting to register an unknown factory: 'service:store'

当我执行前者时,我收到错误store,如果我执行后者,则undefinedember-cli

思考?

(我正在写一个`import TestModuleForComponent from 'ember-test-helpers/test-module-for-component'` `import { createModule } from 'ember-qunit/qunit-module'` # This assumes the last argument, the callbacks, is present, although it # does support the description being an optional argument. moduleForStoreComponent = -> args = Array.prototype.slice.call arguments callbacks = args[args.length-1] # Wrap the original beforeEach callback in a modified version that # also sets up the store for the test container. originalSetup = callbacks.beforeEach callbacks.beforeEach = -> DS._setupContainer(@container) originalSetup.call(@) if originalSetup callbacks.store = -> @container.lookup('store:main') args.unshift TestModuleForComponent createModule.apply @, args `export default moduleForStoreComponent` 样式的应用程序。)

更新

在ember-test-helpers repo中似乎有一个the blog-post

在我等待这个问题的时候,我做了一个可以作为一个临时措施的助手(coffeescript):

{{1}}

1 个答案:

答案 0 :(得分:13)

单元测试是指除了您正在测试的代码/组件/单元之外,一切都能正常工作的地方。

因此,即使store应该被认为是完美的工作(0错误/错误)。

这样的事情应该在你的测试中起作用:

moduleForComponent('tweet-composer', {
    beforeEach: function() {
        this.subject({
            store: {/*empty object*/}
        });
    }
});

如果部分测试依赖于从商店检索的数据,您可以执行以下操作:

this.subject({
    store: {
        find: function() {
          var mockedModel = Ember.Object.create({/*empty*/});
          return mockedModel;
        }
    }
});

这是为了保持“单元测试”的状态,如果你开始包含并注册你的应用程序中的其他对象,你将实际编写集成测试。

注意:

  

通常,直接在组件中查找模型是一种方法   反模式,你应该更喜欢传入你需要的任何模型   包含该组件的模板。

http://discuss.emberjs.com/t/should-ember-components-load-data/4218/2?u=givanse