在Ember-CLI 1.13.1中,我在我的组件中进行了以下集成测试:
import { moduleForComponent, test } from 'ember-qunit';
import hbs from 'htmlbars-inline-precompile';
moduleForComponent('category-tabs', 'Integration | Component | category tabs', {
integration: true
});
test('tapping button fires an external action', function(assert) {
this.on('onTabTouch', function(value) {
assert.equal(value, 'Expense');
});
this.render(hbs`
{{category-tabs onTabTouch=(action "onTabTouch")}}
`);
this.$('button:first').click();
});
然后在我的组件中,我有这个动作:
import Ember from 'ember';
export default Ember.Component.extend({
actions: {
handleTabTouch(tab) {
this.attrs.onTabTouch(tab);
}
}
});
我的测试一直在说:
一项名为“onTabTouch'在[object Object]中找不到。
如何测试闭包动作?我也尝试过:
this.set('onTabTouch', function(value) {
assert.equal(value, 'Expense');
});
它没有用。
答案 0 :(得分:12)
我已经成功解决了这个问题。
而不是写作:
this.on('onTabTouch', function(value) {
assert.equal(value, 'Expense');
});
我写了这个:
this.set('actions', {
onTabTouch(value) {
assert.equal(value, 'Expense');
}
});
编辑:
现在更好的方法就是这样:
this.set('onTabTouch', () => assert.ok(true));
this.render(hbs`
{{category-tabs onTabTouch=(action onTabTouch)}}
`);
请注意(action onTabTouch)
没有任何双引号。