Unit testing 使用Vue CLI和mochapack模拟模块
我在我的Electron应用程序中使用了Electron API的一小部分,对于单元测试来说,能够模拟Unit testing 使用Vue CLI和mochapack模拟模块,unit-testing,webpack,mocha.js,vue-cli,Unit Testing,Webpack,Mocha.js,Vue Cli,我在我的Electron应用程序中使用了Electron API的一小部分,对于单元测试来说,能够模拟Electron模块将非常好,这样当我在测试中深入导入“Electron”时,它会加载模拟版本,而不是无法加载真实版本 我知道Spectron,我也尝试过设置它,但它只是一堆过时的依赖项和毫无意义的错误消息,我放弃了与之斗争。它似乎也不支持headless模式,所以对于我的测试来说,这是一个巨大的过度杀伤力 我还担心Jest有一个Jest.mock()函数,它似乎是为此目的而设计的,但我没有使用
Electron
模块将非常好,这样当我在测试中深入导入“Electron”时,它会加载模拟版本,而不是无法加载真实版本
我知道Spectron,我也尝试过设置它,但它只是一堆过时的依赖项和毫无意义的错误消息,我放弃了与之斗争。它似乎也不支持headless模式,所以对于我的测试来说,这是一个巨大的过度杀伤力
我还担心Jest有一个Jest.mock()
函数,它似乎是为此目的而设计的,但我没有使用Jest,而且在任何情况下,告诉Webpack完全替换模块似乎是一个更干净的解决方案
我想我应该可以用它来做这件事,比如:
resolve: {
alias: {
'electron': path.resolve(__dirname, 'tests/fake_electron.js'),
},
},
但我不知道如何告诉Vue CLI在运行test:unit
时使用该网页包配置。我该怎么做?这很有效
// package.json
...
"scripts": {
"test:unit": "ENABLE_MODULE_MOCKS=1 vue-cli-service test:unit",
我没有费心尝试将它与Typescript集成,因为这个构建系统已经够疯狂的了
// vue.config.js
const path = require("path");
module.exports = {
chainWebpack: config => {
if (process.env.ENABLE_MODULE_MOCKS) {
console.log("Enabling module mocks");
config.resolve.alias.set(
"electron",
path.resolve(__dirname, "tests/mocks/electron.js"),
);
}
},
};
// tests/mocks/electron.js
export const remote = {
app: {
isPackaged: false,
getAppPath: () => "foo",
},
// Add more mocks as required.
};