我想编写一个异步函数的测试,该异步函数从外部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')
})
})
})
我该怎么做?
您需要添加一个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')
})