Javascript Can';使用异步JS测试驱动程序断言DOM更改
我有一个函数,可以在指定的容器中优雅地加载图像。下面的函数可以工作,但是单元测试不能(我知道,羞耻,羞耻,测试前编码) 前3个断言有效,后2个无效(通过先注释一个,然后注释另一个,然后注释两个来测试) 起初,我认为这是一个没有及时加载断言的映像的问题,因此我使测试异步化。但是在Firebug中,我的函数似乎没有更新相同的DOM?可能吗?如果是,我如何纠正这种行为 下面是函数:Javascript Can';使用异步JS测试驱动程序断言DOM更改,javascript,jquery,unit-testing,asynchronous,js-test-driver,Javascript,Jquery,Unit Testing,Asynchronous,Js Test Driver,我有一个函数,可以在指定的容器中优雅地加载图像。下面的函数可以工作,但是单元测试不能(我知道,羞耻,羞耻,测试前编码) 前3个断言有效,后2个无效(通过先注释一个,然后注释另一个,然后注释两个来测试) 起初,我认为这是一个没有及时加载断言的映像的问题,因此我使测试异步化。但是在Firebug中,我的函数似乎没有更新相同的DOM?可能吗?如果是,我如何纠正这种行为 下面是函数: function insertImage(container, url) { var img = new Ima
function insertImage(container, url) {
var img = new Image();
$(img)
.load(function () {
$(this).hide();
$(container)
.removeClass("loading")
.append(this);
$(this).fadeIn();
})
.attr("id", "testImg")
.attr("src", url);
};
以下是测试用例:
var ImageTest = AsyncTestCase('ImageTest');
ImageTest.prototype.testInsertImage = function(queue) {
var url = "test/resources/testimage.jpg";
var testContainer;
var testImage;
assertUndefined(this.testContainer); // PASSES
/*:DOC testContainer = <div id="testDiv"></div>*/
assertNotUndefined(this.testContainer); // PASSES
insertImage("#testDiv", url);
queue.call('Step 1: Wait 5 seconds for Image', function(callbacks) {
var myCallback = callbacks.add(function() {
testImage = document.getElementById("testImg");
});
window.setTimeout(myCallback, 5000);
});
queue.call('Step 2: Assert Image loaded', function() {
assertTrue(this.testContainer != null); // PASSES
assertTrue(this.testImage != null); // FAILS
assertTrue(this.testContainer.hasChildNodes()); // FAILS
});
};
var-ImageTest=AsyncTestCase('ImageTest');
ImageTest.prototype.testInsertImage=函数(队列){
var url=“test/resources/testimage.jpg”;
var测试容器;
var-testImage;
assertUndefined(this.testContainer);//通过
/*:DOC testContainer=*/
assertNotUndefined(this.testContainer);//传递
插入图像(“testDiv”,url);
queue.call('步骤1:等待5秒以获取映像',函数(回调){
var myCallback=callbacks.add(函数(){
testImage=document.getElementById(“testImg”);
});
setTimeout(myCallback,5000);
});
queue.call('步骤2:断言已加载映像',函数(){
assertTrue(this.testContainer!=null);//传递
assertTrue(this.testImage!=null);//失败
assertTrue(this.testContainer.hasChildNodes());//失败
});
};
更新的DOM是相同的。您似乎有两个问题:
1) 您可以在测试中半随机地使用此。
2) 如果此.testContainer=
将初始断言封装在队列中也是一个好主意。call()