我需要使用setTimeout
吗? (当我这样做时,它会起作用)。我遇到的问题是FeedObject
进行异步调用,因此在创建它的新实例时,需要一段时间才能将其自身注入DOM。
describe('Default Case', function () {
before(function () {
$divHolder = $('#divHolder');
$divHolder.html('');
var myComponent = new FeedObject({
div: $divHolder[0],
prop: {
id: 'myFeed',
},
client: {}
});
myComponent.createDOMElements();
});
it('should exist', function () {
console.log($divHolder.find('.feed-item')); // This does not exist unless I use a timeout
});
编辑:只是为了澄清,
new FeedObject
做一个AJAX调用。 最佳答案
您需要确定何时完成new FeedObject
。根据FeedObject
提供的内容,它可能意味着:
提供new FeedObject
完成后调用的回调。在回调中调用done
。
监听事件(很可能是自定义jQuery事件)。在事件处理程序中调用done
。
使before
挂钩返回由new FeedObject
返回的对象上存在的承诺。例如,ready
字段可能包含此承诺,您将执行return myComponent.ready
。摩卡咖啡将等待诺言解决。 (从done
挂钩中删除before
参数。)
我强烈建议您添加上述功能之一,而不要使用setTimeout
。 setTimeout
的问题在于,它总是次优的:要么等待的时间比DOM准备就绪所需的时间长,要么设置的超时时间与准备就绪的实时时间非常接近,但是在某些情况下,超时时间太短(例如,如果您的计算机碰巧出现高峰活动,并且没有足够的CPU占用浏览器运行测试代码的时间),并且由于虚假原因,测试将失败。
关于javascript - JavaScript对象创建后,如何使用Mocha/Chai开始检查DOM元素?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33923107/