我需要使用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参数。)


我强烈建议您添加上述功能之一,而不要使用setTimeoutsetTimeout的问题在于,它总是次优的:要么等待的时间比DOM准备就绪所需的时间长,要么设置的超时时间与准备就绪的实时时间非常接近,但是在某些情况下,超时时间太短(例如,如果您的计算机碰巧出现高峰活动,并且没有足够的CPU占用浏览器运行测试代码的时间),并且由于虚假原因,测试将失败。

关于javascript - JavaScript对象创建后,如何使用Mocha/Chai开始检查DOM元素?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33923107/

10-09 14:45