【发布时间】:2017-04-12 21:06:23
【问题描述】:
我对 Ember 有点陌生,正在尝试测试一个寻呼机组件。简化后的组件如下所示:
export default Ember.Component.extend({
index: 0,
actions: {
next() {
this.incrementProperty('index');
}
}
});
我正在尝试测试 next() 操作是否确实按预期增加了 index 属性。我写了一个这样的单元测试:
test('next should increment the index by 1', function (assert) {
const component = this.subject();
assert.equal(component.get('index'), 0, 'Index should be 0');
component.get('actions').next();
assert.equal(component.get('index'), 1, 'index should be 1');
});
但它失败并出现错误“this.incrementProperty is not a function”。调试,测试中的“this”,当在 next() 函数中时,不是组件的上下文——它是一个以 next() 作为其唯一属性的对象。
我想知道这是否是因为我在测试中调用 nextPlace 操作的方式。我知道我可以编写一个集成测试,单击触发此操作的按钮并比较一些 UI 以确保它已更改,但是当我试图测试的只是函数本身按预期执行时,这似乎非常令人费解。如果它是传递给该组件的操作(关闭操作),我知道我可以在集成测试中设置一个虚拟函数,将其传递给组件,然后查看它如何响应。但是这个动作不会调用传递给它的动作。
我意识到我正在测试的功能非常基础,但部分原因是为了了解如何在不调用外部(对组件)操作的组件中测试操作。
【问题讨论】:
标签: javascript testing ember.js ember-testing