4

我最近一直在写的一个 JavaScript 插件内置了各种故障保护,告诉整个插件或它的一部分隐藏自己并在它无法运行的情况下死掉。例如,假设我们提供的一项功能是,当用户在在线商店中将鼠标悬停在某商品上时,它会自动生成一个显示竞争对手价格的弹出框。然后我们还会进行一些检查,如果我们不知道任何竞争对手的价格,或者我们无法识别该商品,则不要显示弹出框。

我想使用大致遵循以下结构的测试来测试功能禁用:

  1. 将我们的插件加载到应该禁用某些功能的页面上
  2. 欺骗一些会触发该功能的用户操作
  3. 断言没有对 DOM 进行任何可见的更改。(即不改变可见元素的样式,不添加或删除元素,除非它们有display:none

当然,第 3 步是有趣的一步。有没有一种简单的方法可以在 JavaScript 中编写“DOM 不变”测试?(或者在 Selenium for Python 中,这是我用来编写我的测试的——但在 JavaScript 中编写检查可能更广泛有用,因为它可以在任何 JavaScript 测试环境中使用。)


PS 一些注意事项可以避免“你做错了!” 人群:

  • 是的,我知道我可以将上面测试中的第 3 步替换为检查插件将做出的具体更改是否尚未进行,我什至可能决定这样做。但是,如果这些具体的变化没有明确规定并且容易发生变化,这种包罗万象的方法可能会很有用。

  • 是的,我还意识到,当触发了本应无效果的事件时,仅检查 DOM 没有立即的视觉变化并不足以证明没有任何东西已经损坏。不过,这对我目前的目的来说是最好的。另外,即使结果没有用,它也很有趣。

4

1 回答 1

4

使用突变观察者来检测没有发生突变。您可能想查看 Mutation Summary,这是一个非常好的用于突变观察者的高级包装器。检查没有发生突变可能很容易,因为检查返回的数组的长度是否为 0。请参阅https://code.google.com/p/mutation-summary/

于 2013-03-21T14:38:28.130 回答