为了账号安全,请及时绑定邮箱和手机立即绑定

Jest:测试块之间的共享异步代码

Jest:测试块之间的共享异步代码

largeQ 2022-09-02 11:08:05
我有一些这样的测试代码:test('Test', async () => {  const someData = await setup()  const actual = myFunc(someData.x)  expect(actual.a).toEqual(someData.y)  expect(actual.b).toEqual(someData.y)  ... many more like this}我想将代码分解为多个块(因为我甚至无法为每个语句添加描述消息)。testexpect如果Jest支持异步,我可以这样做:describedescribe('Some group of tests', async () => {const someData = await setup()test('Test1', async () => {  const actual = myFunc(someData.x)  expect(actual.a).toEqual(someData.y)}test('Test2', async () => {  const actual = myFunc(someData.x)  expect(actual.b).toEqual(someData.y)}})当然,我可以为每个测试复制设置调用,但这会大大减慢测试速度(我在那里填充MongoDB)。那么,有什么方法可以改善Jest的测试结构吗?
查看完整描述

1 回答

?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

正确的是,回调函数不应该是异步的。它同步定义套件的测试,其范围内的任何异步操作都将被丢弃。describe


以前,Jasmine 和 Jest 允许使用常规函数和 .此功能在Jest中被弃用;公共变量需要由用户定义。this


共享代码可以移动到内部使用 的帮助器函数中, 等:beforeAllbeforeEach


const setupWithTestContext = (testContext = {}) => {

  beforeAll(async () => {

    const setupData = await setup();

    Object.assign(testContext, setupData);

  });

  return testContext; // sets up a new one or returns an existing

});


const anotherSetupWithTestContext = (testContext = {}) => {

  beforeEach(() => {

    testContext.foo = 0;

  });

  return testContext;

});


...


describe('Some group of tests', async () => {

    const sharedTestData = setupTestContext();

    // or

    // const sharedTestData = {}; setupTestContext(sharedTestData);


    anotherSetupWithTestContext(sharedTestData);


    test('Test1', async () => {

      // context is filled with data at this point

      const actual = myFunc(sharedTestData.x)

      ...

    }

    ...

})


查看完整回答
反对 回复 2022-09-02
  • 1 回答
  • 0 关注
  • 86 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信