如何对导致Action的方法进行单元测试

时间:2015-04-03 12:50:02

标签: ember.js ember-cli qunit

在我的Ember应用程序中,我有一个简单的表单组件,具有以下行为(片段):

...
let searchText = this.get('searchText') &&
  this.get('searchText').trim().toLowerCase();

this.sendAction('searchTextChanged', searchText);
...

我如何单元在qunit测试中测试此功能?我无法弄清楚如何听取操作结果。我使用ember-cli附带的测试功能 - qunit,助手等。

1 个答案:

答案 0 :(得分:3)

Ember有关于如何做到这一点here的指南。我将这里的代码放在这里,以防指南发生变化。

鉴于此组件:

App.MyFooComponent = Ember.Component.extend({
  layout:Ember.Handlebars.compile("<button {{action 'doSomething'}}></button>"),

  actions: {
    doSomething: function() {
      this.sendAction('internalAction');
    }
  }
});

你会测试这样的动作:

moduleForComponent('my-foo', 'MyFooComponent');

test('trigger external action when button is clicked', function() {
  // tell our test to expect 1 assertion
  expect(1);

  // component instance
  var component = this.subject();

  // component dom instance
  var $component = this.append();

  var targetObject = {
    externalAction: function() {
      // we have the assertion here which will be
      // called when the action is triggered
      ok(true, 'external Action was called!');
    }
  }; 

  // setup a fake external action to be called when 
  // button is clicked
  component.set('internalAction', 'externalAction');

  // set the targetObject to our dummy object (this
  // is where sendAction will send its action to)
  component.set('targetObject', targetObject);

  // click the button
  click('button');
});