开玩笑的单元测试-异步函数中异步函数的模拟值

时间:2020-04-06 21:42:05

标签: javascript reactjs unit-testing asynchronous jestjs

在我的React项目中,我正在对调用另一个异步函数的异步函数进行单元测试。

//SomeComponent.js
getAllJobs = async () => {
    var allJobStatuses = new Array();
    for(var endpointForRegion in this.props.regionalEndpointsMap) {
        let jobStatusesForRegion = await getJobStatuses(endpoint);
        allJobStatuses = allJobStatuses.concat(jobStatusesForRegion);
....
    }
    return allJobStatuses;
}

getJobStatuses = async (endpoint) => {
   const response = await fetch(endpoint, {
   ......
   return await response.json();
}
//SomeComponentTest.js
describe('<SomeComponent />', () => {
    ....
    beforeEach(() => {
        props = {regionalEndpointsMap: {
             'region1': 'region1ep',
             'region2': 'region2ep'
        }};
        wrapper = shallow(<SomeComponent {...props} />);
    });
    it('should get jobs for all regions', async () => {
        var startTime = new Date();
        let mockdata = {[
            {
            jobId: 'id',
            }
        ]};

        jest.spyOn(wrapper.instance(), 'getJobStatuses').mockResolvedValue(data);
        let allJobs = wrapper.instance.getAllJobs();
        let expectedData = [
            {jobId:'id'},
            {jobId:'id'}
        ];
        expect(allJobs).toEqual(expectedData);
}

尽管每次进行测试,结果最终只是一个空的Promise {}而不是ExpectedData。 我尝试了许多在线发现的实现,这些实现都是模拟async'getJobStatuses'函数的结果而没有运气(显示我从here使用的实现。这是模拟结果的正确方法是什么?函数,用于测试调用它的函数(getAllJobs)

1 个答案:

答案 0 :(得分:0)

由于getAllJobsasync,它将返回一个承诺。您是要await这里的诺言吗?

let allJobs = await wrapper.instance.getAllJobs();