Javascript单元测试 - DOM操作

Jia*_*Jia 13 javascript unit-testing

我对Javacript Unit测试很陌生.有一件事让我烦恼.在测试javascript时,我们经常需要进行DOM操作.看起来我在控制器/组件中测试方法/功能,但我仍然需要依赖模板中的HTML元素.一旦id(或我的测试用例中曾经是选择器的属性)发生变化,我的测试用例也需要更改!这不会违反单元测试的目的吗?

Ben*_*ing 14

javascript单元测试中最棘手的部分之一不是测试,它正在学习如何构建代码以使其可测试.

您需要通过明确分离可测试逻辑和DOM操作来构建代码.

我的经验法则是这样的:

如果您正在测试任何依赖于DOM结构的东西,那么您做错了.

总结:尝试仅测试数据操作和逻辑操作.

  • 我恭敬地不同意@BentOnCoding.DOM操作是Web用户体验的关键部分.如果我们无法测试,那么我们就不擅长做什么.DOM测试已被忽视,因为似乎没有一种好的方法来测试它.但我发现越来越多的库失败(例如Handlebarsjs),因为DOM无法通过精确测试进行操作. (17认同)
  • 感谢您的回答!但是我们应该在哪里测试 DOM 操作的部分呢?端到端测试?您有关于这个主题的推荐书籍/教程吗? (2认同)

art*_*its 6

我恭敬地不同意@BentOnCoding。大多数情况下,组件不仅仅是它的类。组件结合了一个 HTML 模板和一个 JavaScript/TypeScript 类。这就是为什么您应该测试模板和类是否按预期协同工作。仅类测试可以告诉您有关类行为的信息。但是他们无法告诉您组件是否会正确呈现并响应用户输入。

有人说你应该在集成测试中测试它。但是集成测试的编写/运行速度较慢,运行/维护成本更高(在时间和资源方面)。因此,在集成测试中测试大部分组件功能可能会减慢您的速度。

这并不意味着您应该跳过集成测试。虽然集成和 E2E 测试可能比单元测试慢且成本高,但它们让您更有信心相信您的应用程序正在按预期工作。集成测试是将单个单元/组件组合起来并作为一个组进行测试的地方。它不应被视为测试组件模板的唯一场所。