Ember.js 如何将使用ObjectProxy的Ember单元测试转换为集成测试?
在升级到Ember CLI 1.13.1之前,所有组件都生成了一个单元测试,如果我的组件依赖于某个属性,我可能编写了如下代码:Ember.js 如何将使用ObjectProxy的Ember单元测试转换为集成测试?,ember.js,ember-cli,ember-qunit,Ember.js,Ember Cli,Ember Qunit,在升级到Ember CLI 1.13.1之前,所有组件都生成了一个单元测试,如果我的组件依赖于某个属性,我可能编写了如下代码: var supplier = var supplier = Ember.ObjectProxy.create({ ... }); // Creates the component instance var component = this.subject(); assert.equal(component._state, 'preRender'); comp
var supplier = var supplier = Ember.ObjectProxy.create({
...
});
// Creates the component instance
var component = this.subject();
assert.equal(component._state, 'preRender');
component.set('supplier', supplier);
// Renders the component to the page
this.render();
assert.equal(component._state, 'inDOM');
这将通过/呈现所有ok
我现在正在为此编写一个集成测试,如下所示:
var self = this;
Ember.run(function() {
self.set('supplier', supplier);
});
this.render(hbs`{{widgets/add-update-order-item}}`);
我遇到的问题是,
无法读取未定义的
的属性“forEach”的呈现错误,模板的一部分在supplier.prices上有一个{{each}
。如果我将{{log supplier}}放在{{each}}前面的模板中,那么我会看到未定义的
。所以我猜在渲染调用之前,该集没有发生过?我需要做什么才能让它正常工作,我不需要在单元测试表单中进行任何回调或等待,是吗?github上的Rwjblue向我指出()不仅需要设置属性,还必须将其包含在渲染中。将我的测试更改为:
var self = this;
self.set('supplier', supplier);
this.render(hbs`{{widgets/add-update-order-item supplier=supplier}}`);
成功了