Могут ли Spectron, mocha и chai утверждать, что переменные имеют ожидаемые значения в приложении Electron?

Как мы можем утверждать, что javascript-переменная, встроенная в HTML, имеет некоторое ожидаемое значение в приложении, построенном на электроне? Текущий фреймворк для тестирования - это спектрон, мокко, чай, чай, чай () и чай (использование).

Я хочу утверждать, что глобальная переменная foo имеет значение 'foo', Когда я пытаюсь foo.should.equal('foo') я получил ReferenceError: foo is not defined at Context.<anonymous> (test\spec.js:63:28)

Ниже переделан spec.js.

const Application = require('spectron').Application
const assert = require('assert')
const electronPath = require('electron') // Require Electron from the binaries included in node_modules.
const path = require('path')
const chai = require('chai');
const chaiAsPromised = require('chai-as-promised');
const should = require('chai').should();

describe('Isolated testbeds house independent suites of tests.', function() {
  this.timeout(30000);

  before(function() {
    this.app = new Application({
      path: electronPath,

      // directory structure:

      //  |__ myProject
      //     |__ ...
      //     |__ main.js
      //     |__ package.json
      //     |__ index.html
      //     |__ ...
      //     |__ test
      //        |__ spec.js  <- You are here! ~ Well you should be.

      args: [path.join(__dirname, '..')]
    })
    return this.app.start()
  });

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

/* BELOW IS THE TEST IN QUESTION */
  it('should have a given value', function() {
    return Promise.resolve(foo).should.eventually.equal('foo'); // HERE IS THE LINE IN QUESTION
  });

})

1 ответ

Spectron "дистанционно управляет" вашим приложением Electron и не находится в том же пространстве имен. Поэтому foo не определен в вашем тестовом скрипте.

Если foo находится в вашем электронном интерфейсе, вы можете получить к нему доступ, используя this.app.client если это в DOM. this.app.browserWindow или же this.app.webContents может быть в состоянии получить доступ к глобальным?

(Я знаю что executeJavaScript() не будет работать - любая функция, которая возвращает обещание, в принципе не будет работать.)

Если foo на вашем бэк-энде, я показываю обходной путь в своем вопросе: может ли Spectron напрямую вызывать функцию в бэк-энде? (но я все еще ищу подход, который не требует, чтобы я изменил код для тестирования)

Другие вопросы по тегам