延迟测试直到Ember.run.later完成

时间:2014-12-10 01:51:32

标签: ember.js ember-testing

我正在尝试通过ember addon进行一些测试。它工作正常,直到昨天我添加了一些代码,使用Em.run.next在运行循环中运行。

以下是我在测试中所做的事情。

visit('/').then(function() {
  find('bm-select').click();
  andThen(function() {
    equal(1,1, 'yay');
  });
});

问题是当触发点击时,后面的功能在andThen之后执行。到那时我所有的测试都完成了,它会引发错误。我印象深刻,然后等待所有异步的东西完成。

这是我的代码在触发点击时的样子(点击时触发focusOut事件)

lostFocus: function() {
  if(this.get('isOpen')) {
    Em.run.later(this, function() {
      var focussedElement = document.activeElement;
      var isFocussedOut = 
       this.$().has(focussedElement).length === 0 && !this.$().is(focussedElement);
      if(isFocussedOut) {
        this.closeOptions({focus:false});
      }
    }, 0);
  }
}.on('focusOut'),

您可以看到它出现错误Uncaught TypeError: Cannot read property 'has' of undefined。这是来自focusOut方法。当函数执行组件时,_state正在“销毁”并且this.$()返回undefined。

我尝试了wait帮助器,但仍然无法让测试工作。这通常是怎么做的。 我已经提取了测试以在垃圾箱中运行。 Here is the link to it

1 个答案:

答案 0 :(得分:0)

经过进一步调试后,问题出现了标签&bm-select'在拆解测试方法中触发了focusOut事件。因此,当运行循环代码执行时,组件不是inDOM。

我刚刚在测试应用中添加了一个隐藏的输入字段。一旦我运行了所有测试,我将焦点设置到隐藏的输入字段并使用wait测试助手。现在所有的运行循环代码都是在执行拆卸方法时完成的。

相关问题