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

Posted

技术标签:

【中文标题】使用 ember-qunit 测试带有商店的控制器 (DS.FixtureAdapter)【英文标题】:Using ember-qunit to test controllers with a store (DS.FixtureAdapter) 【发布时间】:2014-07-02 06:08:51 【问题描述】:

我有一个控制器的 ember-qunit 测试用例(使用 moduleFor('controller:name', ...)),我希望能够使用 moduleForModel-exclusive 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 中 moduleForModel 的定义中删除了 container.registercontext.__setup_properties__.store 行。

问题是我在运行 ember-qunit 测试套件时遇到错误:

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

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

【问题讨论】:

【参考方案1】:

你的问题可能是你的测试模型没有在容器中注册,所以无法解决。

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

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

或者使用module的needs属性来实现:

moduleForComponent('controller:test', 'My Controller', 

  // specify the other units that are required for this test
  needs: ['model:test'],
  setup: ...,
  teardown: ...
);

【讨论】:

谢谢,缺少的是 needs 字段。它有效!

以上是关于使用 ember-qunit 测试带有商店的控制器 (DS.FixtureAdapter)的主要内容,如果未能解决你的问题,请参考以下文章

分组可折叠导航控制 Windows 商店应用程序?

iOS iBooks 类似商店动画

为控制器中的商店事件设置监听器

Ember 验收测试不适用于 AJAX

使用带有 UI 测试的 Cucumberish 从情节提要加载控制器

使用带有 Spring Boot 的 Spock 测试框架来测试我的 REST 控制器