javascript - 开 Jest : Vue Component can't find mocked function

标签 javascript unit-testing vue.js jestjs

我正在模拟一个在我的 Vue 组件中使用的 ES6 类:

export default class DataUploadApi {
    // Get uploaded files
    static async getUploadedFiles() : Promise<Object> {
        return WebapiBase.getAsync({uri: DATA_UPLOAD_ENPOINTS.FILES});
    }
}

我一直在关注this文档,但我认为我的语法与我的模拟略有不同:

import { mount } from '@vue/test-utils';
import DataUploadApi from '../webapi/DataUploadService';
import FileDownloadList from '../components/file-download-list.vue';

const mockGetUploadedFiles = jest.fn().mockResolvedValue({json: JSON.stringify(uploadedFilesObj)});
jest.mock('../webapi/DataUploadService', () => jest.fn().mockImplementation(() => ({getUploadedFiles: mockGetUploadedFiles})));

describe('file-download-list component', () => {
    beforeEach(() => {
        // @ts-ignore
        DataUploadApi.mockClear(); // https://stackoverflow.com/a/52707663/1695437 dont use @ imports on mocks.
        mockGetUploadedFiles.mockClear();
    });
    describe('renders correct markup:', () => {
        it('without any uploaded files', () => {
            const wrapper = mount(FileDownloadList, {});
            expect(wrapper).toMatchSnapshot();
        });
    });
});

该测试通过。但是,在快照中我可以看到调用的 API 失败并显示以下错误消息:

<p>
    _DataUploadService.default.getUploadedFiles is not a function
</p>

我对函数模拟做错了什么?提前致谢!

最佳答案

我的代码似乎存在一些问题:

模拟 API

使用内部 mockImplementation 似乎会导致问题,如果您不需要额外的模拟功能,则不需要。

jest.mock('@/apps/gb-data/webapi/DataUploadService', () => ({
    getUploadedFiles() {
        return Promise.resolve({ uploaded_files: {} });
    },
}));

测试的更改

两者flushPromisesnextTick 是必需的。

 it('with uploaded files', async () => {
     const wrapper = mount(FileDownloadList, {
         stubs: fileDownloadListStubs,
     });
     await flushPromises();
     await wrapper.vm.$nextTick();
     expect(wrapper).toMatchSnapshot();
});

关于javascript - 开 Jest : Vue Component can't find mocked function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57655118/

相关文章:

javascript - jQuery ajax 成功响应中的调用函数工作一次但不是两次

javascript - SoundCloud api-v2 是否已弃用?

c# - EF反向POCO发生器单元测试

javascript - 在 vuetify 中将覆盖层放在 fab 按钮上

javascript - Vue.js 什么时候不会渲染 &lt;input&gt; ?

java - 如何动态导入javascript和css文件

javascript - HTML表格,单独编辑记录

java - 如何使 Mockito 参数匹配方法签名

c# - 如何在 ASP.NET MVC 中对私有(private) Controller 方法进行单元测试?

javascript - 组件不处理空 prop