Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 使用Vue CLI和mochapack模拟模块_Unit Testing_Webpack_Mocha.js_Vue Cli - Fatal编程技术网

Unit testing 使用Vue CLI和mochapack模拟模块

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 API的一小部分,对于单元测试来说,能够模拟
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.
};