Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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-如何测试更新文档(DOM)的函数?_Javascript_Unit Testing_Jsdom - Fatal编程技术网

Javascript-如何测试更新文档(DOM)的函数?

Javascript-如何测试更新文档(DOM)的函数?,javascript,unit-testing,jsdom,Javascript,Unit Testing,Jsdom,我有以下功能: var doSomething = function(){ var insertHere = document.getElementById('insertHere'); var item = document.createElement('a'); item.innerHTML = "hello"; insertHere.appendChild(item); }; 如您所见,这会将一个项目直接添加到文档中。我想测试这个函数,但不确定最好的方法。

我有以下功能:

var doSomething = function(){
    var insertHere = document.getElementById('insertHere');
    var item = document.createElement('a');
    item.innerHTML = "hello";
    insertHere.appendChild(item);
};
如您所见,这会将一个项目直接添加到
文档中。我想测试这个函数,但不确定最好的方法。我曾考虑过使用jsdom,但
doSomething
希望文档可用,我能看到的唯一方法是将
document
作为可选参数传入

// In my test, create a document using jsdom and pass it to the function.
var jsdom = require("jsdom").jsdom;
var jsdomDocument = jsdom("<html><body><div id='insertHere'></div></body></html>");
doSomething(jsdomDocument );

// Then adjust the function to accept this document.
var doSomething = function(jsdomDocument){
    document = jsdomDocument || document;
    ...
};
//在我的测试中,使用jsdom创建一个文档并将其传递给函数。
var jsdom=require(“jsdom”).jsdom;
var jsdomDocument=jsdom(“”);
剂量测定法(JSDOM文件);
//然后调整函数以接受此文档。
var doSomething=函数(jsdomDocument){
文件=jsdomDocument | |文件;
...
};

…或者是否有更好的方法来测试此函数?

如果您将
插入此处作为参数,它将更多地分离关注点并使测试更容易。这样,您就不必模拟整个文档,只需添加节点内容无法工作,因为测试时没有
文档
。还值得一提的是,我正在通过node进行测试(这样我就可以使用jsdom npm包了)——这是在这种情况下进行测试的最佳方式吗?这是一个有效的观点。您可以将
document
或只是
createElement
作为参数。然而,您的解决方案(以文档为参数)绝对不错。但是如果你那样做,我就不会在那里做
jsdomDocument | | document
。当在代码的其他部分使用它时,只需给它一个真正的
文档
,测试中的
jsdom
一个就可以了。如果将
insertHere
作为一个参数,它将更容易分离关注点并进行测试。这样,您就不必模拟整个文档,只需添加节点内容无法工作,因为测试时没有
文档
。还值得一提的是,我正在通过node进行测试(这样我就可以使用jsdom npm包了)——这是在这种情况下进行测试的最佳方式吗?这是一个有效的观点。您可以将
document
或只是
createElement
作为参数。然而,您的解决方案(以文档为参数)绝对不错。但是如果你那样做,我就不会在那里做
jsdomDocument | | document
。在代码的其他部分使用它时,只需给它一个真正的
文档
,在测试中给它一个
jsdom
文档即可