gpt4 book ai didi

javascript - 如何模拟函数,即在 axios promise 的 "then"中调用的函数?

转载 作者:行者123 更新时间:2023-11-30 19:50:20 24 4
gpt4 key购买 nike

我有一个功能,就是从后端获取数据。当 fetch 成功时,它从响应中提取一个值,然后调用另一个函数(parseAllRecordsData),将该值转换为另一个值。我正在尝试测试此函数,但在模拟 parseAllRecordsData 函数后,它仍在尝试调用原始函数(并从该函数中抛出错误)。

在其他测试中,jest.fn 或 jest.spy 工作正常,但当我尝试模拟“then”中使用的函数时,它不是。

export function fetchAllRecordsData(payload) {
const url = `/apis/${payload.link.split('apis/')[1]}`;
return axios.get(url)
.then(({ data }) => {
if (data && data._embedded) {
const parsedData = data._embedded['taxonomies:entry'];
const arrayData = parseAllRecordsData(parsedData, payload);
return { data: List(arrayData) };
}
return { data: List([]) };
})
.catch((error) => ({ error }));
}

还有我的测试:

describe('fetchAllRecordsData', () => {
const mockedPayload = {
link: 'apis/ok_link',
};

beforeAll(() => {
jest.spyOn(LegalListRecordsApi,'parseAllRecordsData').mockReturnValue(['test']);
});

it('test', async () => {
const test = await LegalListRecordsApi.fetchAllRecordsData(mockedPayload);
expect(test).toEqual(1);
});
});

当它像这样被调用时,parseAllRecordsData 调用真正的函数,并抛出错误,因为模拟的 Axios 响应没有解析函数使用的一些值。我只对返回值感兴趣,对调用此函数不感兴趣。

最佳答案

jest.spyOn(LegalListRecordsApi,'parseAllRecordsData').mockReturnValue(['test']);parseAllRecordsData 模拟模块导出 .

这对 fetchAllRecordsData 没有任何影响,因为它与 parseAllRecordsData 在同一个模块中并且直接调用它。 p>

ES6 模块 supports cyclic dependencies这样您就可以将模块导入自身。

将模块导入自身并使用模块调用parseAllRecordsData:

import * as LegalListRecordsApi from './LegalListRecordsApi';  // import module into itself

export function fetchAllRecordsData(payload) {
const url = `/apis/${payload.link.split('apis/')[1]}`;
return axios.get(url)
.then(({ data }) => {
if (data && data._embedded) {
const parsedData = data._embedded['taxonomies:entry'];
const arrayData = LegalListRecordsApi.parseAllRecordsData(parsedData, payload); // use the module
return { data: List(arrayData) };
}
return { data: List([]) };
})
.catch((error) => ({ error }));
}

...当您模拟 parseAllRecordsData 的模块导出时,调用将被模拟。

关于javascript - 如何模拟函数,即在 axios promise 的 "then"中调用的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54552088/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com