Использование Spectron, чтобы «высмеять» Электрон при тестировании с Jest - PullRequest
1 голос
/ 28 января 2020

Я тестирую код библиотеки для приложения Electron с Jest. Jest делает странные вещи с require, что мешает тому, что Electron должен сделать ... Я думаю.

Spectron предназначен для того, чтобы позволить вам получить доступ к различным битам Electron из тестовой среды, позволяя создать приложение Electron с помощью библиотечных вызовов.

В конечном счете, мне нужно иметь возможность высмеивать require('electron') с некоторыми реальными вещами из Electron (например, создание браузера windows) в основном для того, чтобы различные биты библиотеки могли работать как положено.

Вот как это выглядит должно работать:

в пакете. json:

  "jest": {
    "moduleNameMapper": {
      "^electron$": "<rootDir>/test/mocks/electron.js"
    }
  }

тест / издевательства / электрон. 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)]
  }

Не действительно уверен, где go отсюда. Ищу любые решения

...