几周前,我开始使用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的交互按预期工作的方法是错误的?
感谢您的关注和潜在的解决方案。 如果您需要更多信息来帮助我解决问题,我将尝试尽快提供它们。
致谢