Javascript单元测试DOM元素

Javascript单元测试DOM元素,javascript,unit-testing,dom,Javascript,Unit Testing,Dom,我刚刚开始为我的javascript构建单元测试(使用QUnit),我有一个函数,它接受一个div并处理它的子函数 如何为此创建测试 我正在考虑在每种情况下创建一个具有预期DOM树的文档片段,并对其进行测试。但是由于父对象等不同,递归检查不会失败吗?我还可以怎样做这个测试呢?有一个DOM重置函数,您可以在每次测试后调用该函数,使其返回中立状态 运行操作DOM的函数 然后手动检查DOM是否处于正确的状态,方法是遍历它,并断言所有内容都是它应该处于的位置 而是通过DOM递归地将其与DOMFragme

我刚刚开始为我的javascript构建单元测试(使用QUnit),我有一个函数,它接受一个div并处理它的子函数

如何为此创建测试


我正在考虑在每种情况下创建一个具有预期DOM树的文档片段,并对其进行测试。但是由于父对象等不同,递归检查不会失败吗?我还可以怎样做这个测试呢?

有一个DOM重置函数,您可以在每次测试后调用该函数,使其返回中立状态

运行操作DOM的函数

然后手动检查DOM是否处于正确的状态,方法是遍历它,并断言所有内容都是它应该处于的位置

而是通过DOM递归地将其与DOMFragment循环进行比较,并检查您的函数是否创建了新元素、更改的类、更改的文本、更改的属性等

在编写了一些测试之后,将它们封装在函数中并干燥代码


这样编写代码意味着您可能会在单元测试中重复大量代码,在单元测试中,您将检查DOM中非常相似的内容。为了更好地重复使用这些函数,请将常见的代码片段放入函数中。

有一个DOM重置函数,您可以在每次测试后调用该函数,以返回中立状态

运行操作DOM的函数

然后手动检查DOM是否处于正确的状态,方法是遍历它,并断言所有内容都是它应该处于的位置

而是通过DOM递归地将其与DOMFragment循环进行比较,并检查您的函数是否创建了新元素、更改的类、更改的文本、更改的属性等

在编写了一些测试之后,将它们封装在函数中并干燥代码


这样编写代码意味着您可能会在单元测试中重复大量代码,在单元测试中,您将检查DOM中非常相似的内容。为了更好地重复使用这些函数,需要一些常用的代码并将它们放在函数中。

我找到了一个节点。()函数,它似乎可以完成所需的工作。它似乎没有比较属性。我想比较类名、ID和data-*属性

我找到了一个节点。()函数,它似乎完成了所需的工作。它似乎没有比较属性。我想比较类名、ID和data-*属性

清理DOM不是问题,因为修改是本地化的(可跟踪的)。“手动检查DOM”?你能解释一下吗?我如何断言一切是否都在它应该在的地方?你能解释一下“擦干你的代码”吗?@Diff.Thinkr希望能澄清这一点事实上,DOM操作和其他更改(如对className等的更改)是由相关函数调用的单独函数进行的。即使我验证了这些单独的函数可以完美地工作,我如何断言逻辑和修改后的DOM在编程上是预期的呢?例如,如果我希望将3个节点追加到一个范围中,但由于逻辑错误,只追加了2个节点,则验证基本追加函数不会显示此错误。@DiffThinkr如果调用处理范围的函数,则
断言(Span.childNodes.length==3)
qUnit支持使用容器,所有内容在新测试开始时自动重置。清理DOM不是问题,因为修改是本地化的(可跟踪的)。“手动检查DOM”?你能解释一下吗?我如何断言一切是否都在它应该在的地方?你能解释一下“擦干你的代码”吗?@Diff.Thinkr希望能澄清这一点事实上,DOM操作和其他更改(如对className等的更改)是由相关函数调用的单独函数进行的。即使我验证了这些单独的函数可以完美地工作,我如何断言逻辑和修改后的DOM在编程上是预期的呢?例如,如果我希望将3个节点追加到一个范围中,但由于逻辑错误,只追加了2个节点,则验证基本追加函数不会显示此错误。@DiffThinkr如果调用处理范围的函数,则
断言(Span.childNodes.length==3)
qUnit支持使用容器,所有内容在新测试开始时自动重置。