【问题标题】:Jest: Vue Component can't find mocked function笑话:Vue 组件找不到模拟函数
【发布时间】:2019-08-26 09:23:05
【问题描述】:

我正在模拟一个在我的 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>

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

【问题讨论】:

    标签: javascript unit-testing vue.js jestjs


    【解决方案1】:

    我的代码似乎有一些问题:

    模拟 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();
    });
    

    【讨论】:

      猜你喜欢
      • 2018-10-08
      • 1970-01-01
      • 1970-01-01
      • 2019-07-15
      • 2021-10-18
      • 2019-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多