如何避免为每个Jest测试用例重新运行异步API调用?

问题描述 投票:0回答:1

我想编写一个异步函数的测试,该异步函数从外部API获取数据。

Jest documentation告诉我为测试用例返回一个承诺,如下所示:

test('the data is peanut butter', () => {
  return fetchData().then(data => {
    expect(data).toBe('peanut butter')
  })
})

我的这种方法的问题是,它单独产生了fetchData要求每个测试用例。但是不能保证两个API调用将返回相同的数据,因此每个测试用例可能都在不同的数据集上运行。

我想进行一次fetchData调用,然后在相同的响应数据上运行所有测试-像这样:

describe('fetchData works as expected', () => {
  fetchData().then(data => {

    // test1
    test('the data is peanut butter', () => {
      expect(data).toBe('peanut butter')
    })

    // test2
    test('the data is peanut butter', () => {
      expect(data).toBe('peanut butter')
    })
  })
})

我该怎么做?

javascript asynchronous testing jest
1个回答
0
投票

您需要添加一个beforeAll块,该块对于所有测试用例只能运行一次。因此,您可以在该块中添加fetchData()函数,并在全局变量中分配fetchData()的结果,然后所有测试用例都可以访问该变量。类似于:

let fetchData;
beforeAll(() => {
  return fetchData().then(data => {
    fetchData = data;
  })
});

// test1
test('the data is peanut butter', () => {
  expect(fetchData).toBe('peanut butter')
})

// test2
test('the data is peanut butter', () => {
  expect(fetchData).toBe('peanut butter')
})
© www.soinside.com 2019 - 2024. All rights reserved.