简介
sinon-called-with-diff 是一个基于 sinon 的 npm 包,用于比较函数被调用时传入的参数和期望的参数是否一致。使用这个包可以方便地进行单元测试中参数的校验。
安装
在项目中安装 sinon-called-with-diff 可以通过以下命令进行:
npm install sinon-called-with-diff --save-dev
使用
下面是一个简单的例子,说明如何使用 sinon-called-with-diff 进行测试:
-- -------------------- ---- ------- ----- ------ - ------------------ ----- ----- - ----------------- ----- -------------- - ---------------------------------- -------- ------ -- - ------ - - -- - ----------------- -- -- - ---------- -- ------ ---- ------- ----------- -- -- - ----- --- - --------------- ----- ------------ - --- --- ----- ---------- - --- --- ------------------- ---------------------------------------------- ------------------- ------------------ --- ---
在这个例子中,我们定义了一个 add
函数,并使用 sinon.spy
创建了一个 spy 对象。接着,我们调用了 add
函数,并使用 assert
断言该函数被正确地调用。这里需要注意的是,在断言中使用了 calledWithExactly
和 calledWithDiff
两个函数。其中,calledWithExactly
用于判断函数被调用时传入的参数是否和期望的参数一致,而 calledWithDiff
则用于在断言失败时输出详细信息。
深度
sinon-called-with-diff 本质上是一个比较工具,它的实现原理是通过遍历传入的 spy 对象中保存的调用参数,和期望的参数进行比较。这个过程中需要注意两点:
- spy 对象只会记录最后一次调用的参数,因此如果需要比较多次调用的参数,需要在每次调用之前重置 spy 对象。
- 在比较对象(或数组)时,由于 JavaScript 中的对象比较是引用比较,因此需要使用深度比较来确保比较结果准确。
学习
除了使用 sinon-called-with-diff 进行单元测试外,还可以通过阅读源码来学习更多有关如何编写高质量测试用例的知识。下面是这个包的核心代码:
-- -------------------- ---- ------- -------- ------------------- ---------------- - ----- ---------- - ------------------ -- ------------------ --- -------------------- - ------ --------------------- -------------- - --- ---- - - -- - - ------------------ ---- - -- -------------------------- ----------------- - ------ --------------------- -------------- - - ------ --- - -------- ------------ -- - -- -- --- -- - ------ ----- - -- ------- - --- -------- -- ------ - --- --------- - ------ ------ - ----- ----- - --------------- ----- ----- - --------------- -- ------------- --- ------------- - ------ ------ - --- ------ --- -- ------ - -- ---------------------- - ------ ------ - -- ------------------- -------- - ------ ------ - - ------ ----- - -------- --------------------- ------------- - ------ ------- ---------- ------------------------------ -------- ---------- ---------------------------------- - -------------- - ---------------
这段代码非常简单,只有三个函数。其中,calledWithDiff
函数是最核心的比较函数,它接收一个 spy 对象和期望的参数,并在比较失败时返回一个详细的错误信息。而 deepEqual
函数则是用于深度比
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/43439