使用ember-qunit测试带有store (DS.FixtureAdapter)的控制器



我有一个控制器的成员-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的模型。我将container.registercontext.__setup_properties__.store行从moduleForModel的定义中移除。

问题是,当运行ember-qunit测试套件时,我得到一个错误:

Setup failed on [test case name]: No model was found for 'test'

在ember-qunit之外运行实际的应用程序可以正常工作。也许有人也有同样的问题?也许我用错方法了?

您的问题可能是您的测试模型尚未在容器中注册,因此无法解决。

您可以在测试模块回调期间手动注册:

container.register('model:test', TestModel) 

或者使用模块的needs属性for:

moduleForComponent('controller:test', 'My Controller', {
  // specify the other units that are required for this test
  needs: ['model:test'],
  setup: {...},
  teardown: {...}
});

相关内容

  • 没有找到相关文章

最新更新