web-dev-qa-db-ja.com

動的テストケースをループするJest

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

    });
14
Mehari

上から私のコメントに追加すると、これはうまく機能します

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);
      });
    }
});
16
sesamechicken

これを行うための組み込みの方法があります:

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配列の各内部配列は、引数としてテスト関数に渡されます。

14
justin