禁止对单元测试进行全局Vue初始化

时间:2019-03-18 13:26:24

标签: javascript firebase unit-testing vue.js jestjs

几周前,我开始使用Vue.js,到目前为止一切进展顺利。 随着我的应用程序的发展,我刚开始用玩笑来编写单元测试。

这就是思考的地方...让我们说...很棘手。

在我解释实际问题之前,请先了解一些有关安装的更多信息。 正如我所说的,该应用程序是使用Vue.js制作的(通过vue-cli 3初始化)。 此外,还可以将Vuex用作本地存储,将来自Google的firestore用作持久存储。

我的文件夹结构如下所示(修剪掉了无关的东西)

...
src
    ...
    components
        ...
    provider
        firebase
            ...
            project
    store
        modules
            ...
            project
                state
                getters
                mutations
                actions
    view
        ...
tests
    unit
        provider
            firebase
                project
...

小解释: 在商店中,我具有用于在应用程序中处理的不同数据对象的模块。 在提供程序中,我定义了所有从存储操作中调用的方法,并且这些方法实际上与firebase交互。

现在我为src \ provider \ project写了一个测试。

// Mocking user object from store
jest.mock('@/store/modules/user/state',() => {
    return { currentUser: {uuid: 'MOCK_UUID'} };
});

// Mocking firebase object
jest.mock('firebase', () => {
    return {
        initializeApp: () => {
            return {
                storage: jest.fn(),
                firestore: () => {
                    return {
                        FieldValue: {
                            serverTimestamp: jest.fn(() => { return "MOCK_OBJECT_TIME"; })
                        },
                        settings: jest.fn(),
                        enablePersistence: jest.fn(() => { return Promise.reject('Mock'); })
                    };
                }
            };
        }
    };
});

import ProjectProvider from "@/provider/firebase/project";

describe('Prepare Payload for creation', () => {
    test('Set timestamp and owner', () => {
        let dummyProject = {};
        dummyProject = ProjectProvider.prepareCreatePayload(dummyProject);

        expect(dummyProject.createdAt).toBe("MOCK_OBJECT_TIME");
        expect(dummyProject.owner).toBe("MOCK_UUID");
    });
});

测试本身正在运行并且可以正常工作。

现在是我的问题。 当我启用测试的覆盖范围时,我看到还存在多个组件,并且其他内容已被覆盖,而实际上没有为它们编写测试。 而且测试执行最多需要7秒钟。 (仅适用于上述测试;如果添加另一个简单测试,则持续时间将是所有测试的两倍)

这向我表明,由于整个vue应用程序的初始化远远超出了测试需求。

我现在的问题是: 是否可以模拟全局Vue类以防止所有内容加载,因此测试仅加载所需的内容? 还是我测试与Firebase的交互按预期工作的方法是错误的?

感谢您的关注和潜在的解决方案。 如果您需要更多信息来帮助我解决问题,我将尝试尽快提供它们。

致谢

0 个答案:

没有答案