在Ember集成测试中注入Emberdata的正确方法是什么

时间:2017-06-26 10:46:21

标签: ember.js ember-data integration-testing

我有一个组件,它期望一个模型属性是一个ember数据对象(最初是从路由模型创建的)

我在集成测试中尝试了这个,但商店未定义

test('it renders', function (assert) {
  this.inject.service('store')

  let model = this.get('store').createRecord('post');

  this.set('model', model);

  this.render(hbs`{{post-item-form model = model}}`);

  assert.equal(this.$().text().trim(), 'Post your thoughts');

  // Template block usage:
  this.render(hbs`
    {{#post-item-form}}
      template block text
    {{/post-item-form}}
  `);

  // assert.equal(this.$().text().trim(), 'template block text');
});

1 个答案:

答案 0 :(得分:1)

我更愿意创建一个纯json对象,而不是通过在组件集成测试中使用store来创建记录;因为组件本身对store一无所知,你可以将纯json对象而不是模型实例传递给组件,它仍然可以工作。有了这种心态,我只会在验收测试中处理store

如果你还想按照你提到的方式行事;我相信您需要按如下方式检索store

var store = Ember.getOwner(this).lookup("service:store");

由于;默认情况下,在测试模式下禁用自动运行循环;当您运行以下代码let model = store.createRecord('post')时,很可能会得到一个断言错误,表明没有可用的运行循环;这意味着你需要将它包装在像Ember.run(()=>model = store.createRecord('post'));这样的运行循环中。我没试过我写的东西;但我想这应该有用。

再一次;为什么需要在集成测试中通过store创建记录?如果你真的喜欢用商店;那么验收测试应该更好;因为store将启动并运行,您无需通过查找来检索它。我希望这会有所帮助。