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

我有一些这样的测试代码:


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支持异步,我可以这样做:describe


describe('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的测试结构吗?


largeQ
浏览 87回答 1
1回答

qq_花开花谢_0

正确的是,回调函数不应该是异步的。它同步定义套件的测试,其范围内的任何异步操作都将被丢弃。describe以前,Jasmine 和 Jest 允许使用常规函数和 .此功能在Jest中被弃用;公共变量需要由用户定义。this共享代码可以移动到内部使用 的帮助器函数中, 等:beforeAllbeforeEachconst 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)      ...    }    ...})
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript