Jest looping through dynamic test cases

Mehari picture Mehari · Aug 16, 2017 · Viewed 28.7k times · Source

How do I loop through dynamic test cases in Jest?

I have test cases like the following how do I dynamically create jest test case using it/test methods.

Here is what I have tried , However it just passes without excuting the test cases in the loop.

    const mymodule = require('mymodule');

    const 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 method", () => {
            for (let i = 0; i < testCases.length; i++) {
                const { q,r } = testCases[i];
                it(`should  add ${q[0]},${q[1]} to ${expected}`, () => {
                    const actual = mymodule.add(q[0] + q[1]);
                    expect(actual).toBe(expected);
                });
            }
        });
    
    });

Answer

justin picture justin · Nov 8, 2018

There's an in-built way to do this: test.each(table)(name, fn, timeout)

e.g.

test.each([[1, 1, 2], [1, 2, 3], [2, 1, 3]])(
  '.add(%i, %i)',
  (a, b, expected) => {
    expect(a + b).toBe(expected);
  },
);

where each inner array in the 2D array is passed as args to the test function.