如何在Jest中循环动态测试用例?
我有以下测试用例如何使用it/test
方法动态创建jest测试用例。
以下是我尝试的内容 ,但它只是通过而不会在循环中排除测试用例。
const mymodule = require('mymodule');
let testCases = [
{q: [2, 3],r: 5},
{q: [1, 2],r: 3},
{q: [7, 0],r: 7},
{q: [4, 4],r: 8}
];
describe("Test my Math module", () => {
test("test add sub module", () => {
for (let i = 0; i < testCases.length; i++) {
let item = testCases[i];
let q = item.q;
let expected = item.r;
it(`should add ${q[0]},${q[1]} to ${expected}`, () => {
let actual = mymodule.add(q[0] + q[1]);
expect(actual).toBe(expected);
});
}
});
});
答案 0 :(得分:13)
从上面添加我的评论,这将正常工作
import jest from 'jest';
import { sumModule } from './';
const tests = [
{x: 1, y: 2, r: 3},
{x: 3, y: 4, r: 7}
];
describe('Adding method', () => {
for(let i = 0; i < tests.length; i++){
it('should add its params', () => {
const actual = sumModule(tests[i].x, tests[i].y);
expect(actual).toBe(tests[i].r);
});
}
});
答案 1 :(得分:7)
有一种内置的方法:
https://jestjs.io/docs/en/api#1-testeachtable-name-fn-timeout
例如
test.each([[1, 1, 2], [1, 2, 3], [2, 1, 3]])(
'.add(%i, %i)',
(a, b, expected) => {
expect(a + b).toBe(expected);
},
);
2D数组中的每个内部数组都作为args传递给测试函数。
答案 2 :(得分:4)
答案 3 :(得分:2)
您可以使用经典的JS,它更具可读性,并且代码更少:
[
{ input: [2, 3], output: 5 },
{ input: [1, 2], output: 3 },
]
.forEach(({ input, output }) => {
it(`works correctly for ${input}`, () => {
// ...
expect(...).toBe(output);
});
})
答案 4 :(得分:0)
For 循环是开玩笑的,不需要无缘无故地使用内置函数!
test('adding positive numbers is not zero', () => {
for (let a = 1; a < 10; a++) {
for (let b = 1; b < 10; b++) {
expect(a + b).not.toBe(0);
}
}
});