如何将使用 ObjectProxy 的 Ember 单元测试转换为集成测试?
How do I convert an Ember unit test using ObjectProxy to an integration test?
在升级到 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');
component.set('supplier', supplier);
// Renders the component to the page
this.render();
assert.equal(component._state, 'inDOM');
这 pass/render 没问题。
我现在正在为此编写集成测试,如下所示:
var self = this;
Ember.run(function() {
self.set('supplier', supplier);
});
this.render(hbs`{{widgets/add-update-order-item}}`);
我遇到的问题是 Cannot read property 'forEach' of undefined
的渲染错误,部分模板的 {{each}}
超过 supplier.prices。如果我在模板中将 {{log supplier}} 放在 {{each}} 之前,那么我会看到 undefined
。所以我的猜测是设置在渲染调用之前没有发生?我需要做什么才能让它正常工作,我不需要在单元测试表单中进行任何回调或等待,现在可以吗?
github 上的 Rwjblue 向我 (https://github.com/ember-cli/ember-cli/issues/4532) 指出,您不仅必须设置 属性,还必须将其包含在渲染中。将我的测试更改为:
var self = this;
self.set('supplier', supplier);
this.render(hbs`{{widgets/add-update-order-item supplier=supplier}}`);
成功了。
在升级到 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');
component.set('supplier', supplier);
// Renders the component to the page
this.render();
assert.equal(component._state, 'inDOM');
这 pass/render 没问题。
我现在正在为此编写集成测试,如下所示:
var self = this;
Ember.run(function() {
self.set('supplier', supplier);
});
this.render(hbs`{{widgets/add-update-order-item}}`);
我遇到的问题是 Cannot read property 'forEach' of undefined
的渲染错误,部分模板的 {{each}}
超过 supplier.prices。如果我在模板中将 {{log supplier}} 放在 {{each}} 之前,那么我会看到 undefined
。所以我的猜测是设置在渲染调用之前没有发生?我需要做什么才能让它正常工作,我不需要在单元测试表单中进行任何回调或等待,现在可以吗?
github 上的 Rwjblue 向我 (https://github.com/ember-cli/ember-cli/issues/4532) 指出,您不仅必须设置 属性,还必须将其包含在渲染中。将我的测试更改为:
var self = this;
self.set('supplier', supplier);
this.render(hbs`{{widgets/add-update-order-item supplier=supplier}}`);
成功了。