我有一个控制器的ember-qunit测试用例(使用moduleFor('controller:name', ...)
),我希望能够使用moduleForModel
- 独占this.store()
来检索DS.FixtureAdapter数据存储。对于这个特定的测试用例,我不是要测试模型 - 我只是想验证控制器是否可以填充一组模型实例,并且可以针对该数据运行各种操作。
我正在使用coffeescript,因此我的代码如下:
moduleFor("controller:test", 'My Controller', {
setup: ->
@store().createRecord 'test', value: 1
@store().createRecord 'test', value: 2
@subject({
model: @store().all('test')
})
teardown: -> App.reset()
}, (container, context) ->
container.register 'store:main', DS.Store
container.register 'adapter:application', DS.FixtureAdapter
context.__setup_properties__.store = -> container.lookup('store:main')
)
在上面的示例中,有一个名为TestController的控制器,还有一个名为Test的模型。我从ember-qunit的container.register
定义中解除了context.__setup_properties__.store
和moduleForModel
行。
问题是我在运行ember-qunit测试套件时遇到错误:
Setup failed on [test case name]: No model was found for 'test'
在ember-qunit之外运行实际应用程序可以正常工作。也许那里有人有同样的问题?或者我采取了错误的做法?
答案 0 :(得分:4)
您的问题可能是您的测试模型尚未在容器中注册,因此无法解决。
您可以在测试模块回调期间手动注册:
container.register('model:test', TestModel)
或者使用moduleFor impl的needs属性:
moduleForComponent('controller:test', 'My Controller', {
// specify the other units that are required for this test
needs: ['model:test'],
setup: {...},
teardown: {...}
});