Могут ли 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 напрямую вызывать функцию в бэк-энде? (но я все еще ищу подход, который не требует, чтобы я изменил код для тестирования)