Kev*_*hey 11 ember.js ember-data ember-cli ember-qunit
根据博客文章的ember-data版本1.0.0-beta.16,商店现在可以用作服务:
TweetComposerComponent = Ember.Component.extend({
store: Ember.inject.service()
});
Run Code Online (Sandbox Code Playgroud)
但是,我无法弄清楚如何qunit对这样的组件进行单元测试.我尝试过以下方法:
moduleForComponent('tweet-composer', {
needs: ['service:store']
});
Run Code Online (Sandbox Code Playgroud)
和:
moduleForComponent('tweet-composer', {
needs: ['store:main']
});
Run Code Online (Sandbox Code Playgroud)
当我做前者时,我得到一个错误Attempting to register an unknown factory: 'service:store',如果我做后者那么store就是undefined.
思考?
(我正在写一个ember-cli样式应用程序).
更新:
在ember-test-helpers repo中似乎存在一个未解决的问题.
在我等待这个修复的同时,我制作了一个可以作为一种间隙测量的辅助工具(coffeescript):
`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`
Run Code Online (Sandbox Code Playgroud)
giv*_*nse 13
除了您正在测试的代码/组件/单元之外,单元测试是一切都能正常工作的地方.
因此,即使store应该假设工作正常(0错误/错误).
这样的东西应该在你的测试中起作用:
moduleForComponent('tweet-composer', {
beforeEach: function() {
this.subject({
store: {/*empty object*/}
});
}
});
Run Code Online (Sandbox Code Playgroud)
如果部分测试依赖于从商店检索的数据,您可以执行以下操作:
this.subject({
store: {
find: function() {
var mockedModel = Ember.Object.create({/*empty*/});
return mockedModel;
}
}
});
Run Code Online (Sandbox Code Playgroud)
这是为了保持"单元测试"的状态,如果你开始包含并注册你的应用程序中的其他对象,你将实际编写集成测试.
注意:
通常,直接在组件中查找模型是反模式,您应该更喜欢在包含该组件的模板中传入所需的任何模型.
http://discuss.emberjs.com/t/should-ember-components-load-data/4218/2?u=givanse
| 归档时间: |
|
| 查看次数: |
4186 次 |
| 最近记录: |