我正在使用 Jest 测试 Electron 应用程序的库代码。Jest 做了一些奇怪的事情require
,这干扰了 Electron 需要做的事情......我认为。
Spectron 旨在允许您通过库调用创建 Electron 应用程序,从而允许您从测试框架内访问各种 Electron 位。
最终,我需要能够使用来自 Electronrequire('electron')
的一些真实的东西进行模拟(比如创建浏览器窗口),主要是为了让各种库位可以按预期工作。
这是它应该工作的样子:
在 package.json 中:
"jest": {
"moduleNameMapper": {
"^electron$": "<rootDir>/test/mocks/electron.js"
}
}
测试/模拟/electron.js:
const Path = require("path")
const Application = require('spectron').Application
const electronPath = Path.join(__dirname, "../../node_modules/electron/dist/Electron.app/Contents/MacOS/Electron")
const app = new Application({ path: electronPath })
module.exports = app.electron
根据文档,应该可以访问与正常操作下app.electron
相同的内容。require('electron')
一些测试:
const { BrowserWindow } = require("electron")
test("some test", () => {
const window = new BrowserWindow()
// ...
})
但是,这失败了,因为app.electron
它是未定义的,尽管App
它本身已定义:
console.log test/mocks/electron.js:58
<ref *1> Application {
host: '127.0.0.1',
port: 9515,
quitTimeout: 1000,
startTimeout: 5000,
waitTimeout: 5000,
connectionRetryCount: 10,
connectionRetryTimeout: 30000,
nodePath: '~/.nvm/versions/node/v13.0.1/bin/node',
path: '~/electron-hello-world/node_modules/electron/dist/Electron.app/Contents/MacOS/Electron',
args: [],
chromeDriverArgs: [],
env: {},
workingDirectory: '~/electron-hello-world',
debuggerAddress: undefined,
chromeDriverLogPath: undefined,
webdriverLogPath: undefined,
webdriverOptions: {},
requireName: 'require',
api: Api { app: [Circular *1], requireName: 'require' },
transferPromiseness: [Function (anonymous)]
}
不太确定从这里去哪里。寻找任何解决方案