封闭动作的Ember集成测试

时间:2015-07-26 05:59:10

标签: javascript ember.js

在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');
});

它没有用。

1 个答案:

答案 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)没有任何双引号。