【问题标题】:Using Jest's test.each parameterized test variable scope使用 Jest 的 test.each 参数化测试变量范围
【发布时间】:2021-05-05 23:44:09
【问题描述】:

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

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

【问题讨论】:

标签: javascript jestjs


【解决方案1】:

您确实忘记了 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 中创建对象和其他必需的东西,并直接引用它们(我的变量),但每次运行更改的测试数据似乎并没有从外部循环中获取值。

【讨论】:

  • 对不起,我确实有不止一个测试用例,只是简化了这个例子以保持手头的问题简洁。我希望在我的测试用例中引用变量,但似乎不可能
  • @WillHuang 我无法让它工作。但是,如果您使用的是变量,则可以将测试移动到一个函数中并调用它。如果您的变量可能是数组,您可以对它们进行 foreach 并执行您正在尝试的操作。
  • 是的,我从 Jest 团队那里得到了答复,基本上是做不到的。 jestjs.io/docs/en/troubleshooting#defining-tests
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-14
  • 1970-01-01
  • 2018-06-01
相关资源
最近更新 更多