|
Post by account_disabled on Jan 31, 2024 8:41:49 GMT
当对现实世界的代码进行单元测试时,有很多情况使得测试很难编写。如何检查函数是否被调用?如何测试 Ajax 调用?或者使用代码setTimeout?这就是你使用测试替身的时候——替换代码,使难以测试的事情变得容易测试。 多年来,Sinon.js一直是 JavaScript 测试中用于创建测试替身的事实上的标准。对于任何编写测试的 JavaScript 开发人员来说,它都是必备工具,因为没有它,为实际应用程序编写测试几乎是不可能的。 最近,一个名为testdouble.js的新库引起了轰动。它拥有与 Sinon.js 类似的功能集,但也有一些差异。 在本文中,我们将研究 Sinon.js 和 testdouble.js 提供的功能,并比较它们各自的优缺点。Sinon.js 仍然是最佳选择,还是挑战者会获胜? 注意:如果您不熟悉测试替身,我建议您首先阅读我的 Sinon.js 教程。它将帮助您更好地理解我们将在这里讨论的概念。 Learn to Code with JavaScript 本文中使用的术语 为了确保易于理解正在讨论的内容,这里对所使用的术语进行了快速概述。这些是 Sinon.js 的定义,在其他地方可能略有不同。 测试替身是测试期间使用的函数的替代品。它可以指以下三种类型中的任何一种。 间 WhatsApp 号码数据 谍是一个测试替身,它允许在不影响目标函数行为的情况下检查效果。 存根是一个测试替身,它用其他东西替换目标函数的行为,例如返回一个值。 模拟是存根的另一种方法。模拟包含内置验证,可以用来代替单独的断言。 应该注意的是,的目标之一是减少此类术语之间的混淆。 Sinon.js 和 testdouble.js 概览 让我们首先看看Sinon.js 和testdouble.js 在基本使用方面的比较。 Sinon 对于测试替身有三个独立的概念:Spies、stubs 和mocks。这个想法是每个代表不同的使用场景。这使得来自其他语言或阅读过使用相同术语(例如xUnit Test Patterns )的书籍的人更熟悉该库。 但另一方面是,这三个概念也会让诗乃在初次使用时更加难以理解。 以下是 Sinon 用法的基本示例相比之下,testdouble.js 选择更简单的 API。它没有使用间谍或存根等概念,而是使用 JavaScript 开发人员更熟悉的语言,例如td.function、td.object和td.replace。这使得 testdouble 可能更容易上手,并且更适合某些任务。但另一方面,一些更高级的用途可能根本不可能(有时是故意的)。 Learn to Code with JavaScript 这是 testdouble.js 使用时的样子使用的语言更加简单。我们“替换”一个函数而不是“存根”它。我们要求 testdouble “解释”一个函数以从中获取信息。除此之外,到目前为止,它与诗乃相当相似。 这也延伸到创建“匿名”测试替身更大的差异之一与如何设置存根和验证有关。使用Sinon,您可以在存根之后链接命令,并使用断言来验证结果。testdouble.js 只是让您向它展示您希望如何调用该函数 - 或者如何“排练”函数调用。
|
|