Emberjs测试Component的动作委托

时间:2014-03-27 02:57:14

标签: unit-testing testing ember.js sinon

我试图测试一个使用动作委派的简单组件。我想测试某个动作是否发送到组件的actionDelegate。我正在考虑使用Sinon检查是否正在发送操作,但我无法解决如何复制Ember用于将其操作发送给其代理/目标的结构。

我的sinon" spy delegate"对象需要我检查组件是否使用" send"来委托事件。当用户点击按钮时?

我已经创建了一个我想在http://jsfiddle.net/L3M4T/测试的东西的例子,但是它还没有测试它周围的线束(这是一个很重要的工作一个组件周围的测试工具只是为了一个简单的js小提琴 - 事实上,将这个组件变成我想要解释这个问题的形状是一项相当大的工作。)

这是我的组成部分:

App.AppProfileComponent = Ember.Component.extend({
    actionDelegate: null,
    actions: {
        hello: function(person) {
            if(!Ember.isEmpty(this.get('actionDelegate'))) {
                this.get('actionDelegate').send('hello', person);
            }
        }
      }
});

我的初学尝试不起作用就是编写一个包含这个片段的测试(使用sinon& qunit):

visit("/").click("button").then(function() {
  equal(actionDelegateSpy.called, true, "Action delegate should be called when button pressed");
});

我认为 无法正常工作的原因非常明显,但是我已经尝试了以下内容,但这些内容也无效:

var actionDelegateSpy = sinon.spy();
var actionDelegate = Ember.ObjectController.extend({
  actions: {
    "hello" : actionDelegateSpy
  }
}).create();

然后通过传入上面定义的actionDelegate作为测试组件的actionDelegate进行测试。

1 个答案:

答案 0 :(得分:2)

我修复了自己的问题......傻傻的我:

  test("delegates its hello action to actionDelegate", function() {
    var actionDelegateSpy;

    Ember.run(function() {
      actionDelegateSpy = sinon.spy();
      var actionDelegate = Ember.ObjectController.extend({
        actions: {
          "hello" : actionDelegateSpy
        }
      }).create();
      controller.set('actionDelegate', actionDelegate);      
    });

    visit("/").click("button")
    .then(function() { 
      equal(actionDelegateSpy.called, true, "Action delegate should be called when hello button pressed");
    });
  });