我有这样的集成测试:灰烬集成测试失败
test('can change chord text', function(assert) {
this.render(hbs`{{chart-editor-chord chord=chord}}`);
this.$().click();
assert.ok(!!this.$('.chord-input').length);
});
但断言失败,分量模板看起来是这样的:
<div {{action 'changeChord'}} class="measure-chord chord-big">
{{#if chord.editing}}
<input type="text" value="{{chord.name}}" class="chord-input">
{{else}}
{{chord.name}}
{{/if}}
</div>
和组件代码:
import Ember from 'ember';
export default Ember.Component.extend({
store: Ember.inject.service(),
actions: {
changeChord() {
this.chord.set('editing', true);
}
}
});
我正在更新changeChord()
动作中的chord
模型,它确实如果我在浏览器中测试,则工作,但集成测试失败。那么,模型中的这种改变是否必须与模板同步呈现?我尝试在测试中使用wait(),但这没有什么区别。那么我应该如何测试呢?
由于在执行此操作时会发生什么!我多么愚蠢的想念jQuery选择器中的'.measure-chord'类......我以为我错过了更深层次的东西。为什么'Ember.set(这个,'chord.isEditing',...)'更好? 'this.get('chord').set'在我看来看起来更好。你用'div'包装器是什么意思?如果我不需要在其上添加任何属性? – rednaw
@rednaw在某些情况下,或者您可能想要模拟“和弦”对象的某些测试。当'chord'不再是Ember对象时,'this.set'将不起作用,但是'Ember.set'将会起作用。 – ykaragol
@rednaw你的第二个问题,看看[第二旋转](https://ember-twiddle.com/517e36b719eb6e1913ef98c91726f52d/96b90124c54f5a7a264b9cc17719c2f2df4c8505?openFiles=tests.integration.components.chart-editor-chord-test.js%2C )。这是一个'无标签组件'的例子。你当然可以通过'attributeBindings'属性 – ykaragol