使用Jest的test.each参数化测试变量范围

时间:2018-10-25 18:40:28

标签: javascript jestjs

对不起,如果我的头衔很烂,不确定如何描述它,但这是一个示例。

如果我有这样的规格文件:

let a;
beforeEach(() => {
   a = 'hello';
})

describe('my test suite', () => {
    test.each([
        [a, 'hello']
    ])(
    'testing %s with expected result %s',
    (myVariable, expectedResult) => {
        expect(myVariable).toBe(expectedResult);
    })
});

我收到一个错误,指出参数化表中未定义a。如果我使用常规的test方法,则可以访问a。只是想知道是否可以解决此问题,或者我做错了什么。

1 个答案:

答案 0 :(得分:0)

您确实忘记了beforeEach()行上的右括号。

let a;
beforeEach(() => {
   a = 'hello';
} );

您也有i%和%1,它们用于整数,并且您需要字符串(%s)。

只有一个测试,您不需要beforeEach(),只需执行以下操作即可:

const a:string = 'hello';
test.each([[a, 'hello']])(
    '.compare(%s, %s)',
    (myVariable, expected) => {
        expect(myVariable).toBe(expected);
    },
);

但是,我也无法使它正常工作。我可以在测试中直接引用该变量,例如:

const a:string = 'hello';
test.each([[a, 'hello']])(
    '.compare(%s, %s)',
    (myVariable, expected) => {
        expect(a).toBe(expected);
    },
);

使用myVariable不会从测试的闭环内部获取值。文字确实可以工作。 beforeEach会破坏在此处设置值的目的,因为不需要在test.each()的中间进行更改,因为这意味着可以使用不同的数据运行相同的测试。您仍然可以在beforeEach中创建对象和其他必需的东西,并直接引用它们(我是一个变量),但是每次运行更改的测试数据似乎都无法从外部循环中获取值。