我正在尝试通过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
答案 0 :(得分:0)
经过进一步调试后,问题出现了标签&bm-select'在拆解测试方法中触发了focusOut
事件。因此,当运行循环代码执行时,组件不是inDOM。
我刚刚在测试应用中添加了一个隐藏的输入字段。一旦我运行了所有测试,我将焦点设置到隐藏的输入字段并使用wait
测试助手。现在所有的运行循环代码都是在执行拆卸方法时完成的。