app.browserWindow возвращает TypeError во время тестирования электронного приложения с помощью Spectron - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь запустить простые тесты в своем электронном приложении, используя Spectron и mocha. Однако всякий раз, когда я пытаюсь использовать browserWindow API, я получаю сообщение об ошибке в виде:

TypeError: Cannot read property '..... 'of undefined

Я немного исследовал inte rnet. Некоторые предлагаемые мной решения заключались в том, чтобы гарантировать, что nodeIntegration установлено в значение true, и что DevTools не открыт в окне приложения. Я убедился, что оба этих критерия соблюдены, но все равно получаю ту же ошибку. Что мне здесь не хватает? Прилагаю свой код для справки.

main. js

const {app, BrowserWindow} = require('electron')
const path = require('path')
let mainWindow

function createWindow () {
  mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      preload: path.join(__dirname, 'preload.js'), 
      nodeIntegration:true
    }
  })

  mainWindow.loadFile('index.html')

}

app.whenReady().then(() => {
  createWindow()
  
  app.on('activate', function () {

    if (BrowserWindow.getAllWindows().length === 0) createWindow()
  })
})

app.on('window-all-closed', function () {
  if (process.platform !== 'darwin') app.quit()
})

test. js

const Application = require('spectron').Application
const assert = require('assert')
const electronPath = require('electron') 
const path = require('path')
const { app } = require('electron')
const { expect } = require('chai')

describe('Application launch', function () {
  this.timeout(10000)

  before(function () {
    this.app = new Application({
      path: electronPath,
      args: [path.join(__dirname, '.')]
    })
    return this.app.start()
  })

  after(function () {
    if (this.app && this.app.isRunning()) {
      return this.app.stop()
    }
  })

  it('should be a focused window', function(){
    return this.app.client.waitUntilWindowLoaded().browserWindow.isFocused().then(res => {
      expect(res).to.be.true
    })
  })
})

Проблема возникает в строке this.app.client.waitUntilWindowLoaded().browserWindow.isFocused()

...