【问题标题】:Emberjs Testing a Component's action delegateEmberjs 测试组件的动作委托
【发布时间】:2014-05-05 19:46:03
【问题描述】:

我正在尝试测试一个使用动作委托的简单组件。我想测试某个操作是否发送到组件的 actionDelegate。我正在考虑使用 Sinon 来检查是否正在发送动作,但我不知道如何复制 Ember 用于将其动作发送给其代表/目标的结构。

当用户单击按钮时,我的 sinon“间谍委托”对象将采用什么结构,以便我检查组件是否使用“发送”委托事件?

我创建了一个我想在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 进行测试。

【问题讨论】:

    标签: unit-testing testing ember.js sinon


    【解决方案1】:

    我解决了我自己的问题......我很傻:

      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");
        });
      });
    

    【讨论】:

    • 通过意识到所有异步行为必须包装在对 Ember.run 的调用中以在运行预期之前对其进行同步,这一点“显然”得到了解决。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多