Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Can';使用异步JS测试驱动程序断言DOM更改_Javascript_Jquery_Unit Testing_Asynchronous_Js Test Driver - Fatal编程技术网

Javascript Can';使用异步JS测试驱动程序断言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

我有一个函数,可以在指定的容器中优雅地加载图像。下面的函数可以工作,但是单元测试不能(我知道,羞耻,羞耻,测试前编码)

前3个断言有效,后2个无效(通过先注释一个,然后注释另一个,然后注释两个来测试)

起初,我认为这是一个没有及时加载断言的映像的问题,因此我使测试异步化。但是在Firebug中,我的函数似乎没有更新相同的DOM?可能吗?如果是,我如何纠正这种行为

下面是函数:

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()