Syn*_*nia 4 testing automated-tests unit-testing jestjs
如果我想为一个将东西加在一起的计算器编写一个测试。我可能会这样定义我的测试:
const tests = [
{
input: [1, 2],
expected: 3,
},
{
input: [2, 1],
expected: 3,
},
{
input: [3, 4],
expected: 7,
},
{
input: [2, 10],
expected: 12,
},
{
input: [2, 5],
expected: 7,
},
...
]
tests.forEach((t) => {
expect(add(t.input)).toEqual(t.expected)
})
Run Code Online (Sandbox Code Playgroud)
问题是,如果其中一项测试失败,错误只会显示:
Expected: "7"
Received: "10"
216 | tests.forEach((t) => {
> 217 | expect(add(t.input)).toEqual(t.expected)
| ^
218 | })
Run Code Online (Sandbox Code Playgroud)
由此看来,我分不清是3+4算错了,还是2+5算错了。
另一种方法是不使用数组,而是将每个数组定义为自己的测试。然而,这需要更多的代码,并且您需要将expect语句复制粘贴到各处。
那么,测试复杂的计算函数(需要传递许多不同的输入排列以确保其正常工作)的最佳方法是什么?
Ten*_*eff 13
您可以使用 jest 的test.each将它们定义为单独的测试用例:
test.each(tests)('add %j', ({ input, expected }) => {
expect(add(input)).toEqual(expected)
})
Run Code Online (Sandbox Code Playgroud)
但更好的是,您可以定义tests如下以利用 printf 格式:
const tests = [
[[1,2], 3],
[[2,1],3],
[[3,4],7],
[[2,10],12],
[[2,5],7]
]
test.each(tests)('add(%j) should equal %d', (input, expected) => {
expect(add(input)).toEqual(expected)
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7216 次 |
| 最近记录: |