Jest循环遍历动态测试用例

时间:2017-08-16 12:46:19

标签: javascript node.js unit-testing jestjs

如何在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);
                });
            }
        });

    });

5 个答案:

答案 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)

如果有人想知道这对于单个输入函数如何工作,请举个例子

h

https://jestjs.io/docs/en/api#testeachtablename-fn-timeout

答案 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);
    }
  }
});