我有一个组件,它期望一个模型属性是一个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');
});
答案 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
将启动并运行,您无需通过查找来检索它。我希望这会有所帮助。