Может ли Spectron напрямую вызывать функцию в бэк-энде?
В моем приложении Electron я хочу проверить опцию Файл | Сохранить. Но в настоящее время Spectron не может позволить нам нажимать на пункты меню (см. Выпуск 21). Я также должен был бы высмеивать диалог выбора файла.
Итак, я думал, что проколоть черный ящик и прямо позвонить save()
функция, которая вызывается обратным вызовом dialog.showSaveDialog()
(это в моем файле main.js, то есть в бэк-энде приложения Electron). Но я не могу найти какой-либо доступ к этому.
Вот мой обходной путь. Во-первых, в нижней части main.js я добавил это:
app.spectronSave = (testFilename)=>{
save(testFilename)
}
Затем в моих тестах мокко / спектрон я сделал это:
it('save document', function(){
return this.app.electron.remote.app.spectronSave("/tmp/test.txt")
.then( () => {
//Pause, or wait for signs the save has worked
//Look at file, and do asserts
})
})
Это работает (я думаю, я буду изменять save()
чтобы вернуть обещание, чтобы сохранить текущую потребность в паузе (*)), но необходимость добавлять код в main.js раздражает, и приходится добавлять в app
объект чувствует себя неправильно. Есть ли альтернатива?
*: ОБНОВЛЕНИЕ: объекты обещания не выживают, возвращаемые интерфейсом remote.app (в итоге вы получаете {}
). Таким образом, единственный выбор (?) - искать побочные эффекты действия (например, появление файла в случае сохранения) или играть на фиксированную паузу. (Я обнаружил, что необходима небольшая пауза, по крайней мере, например, 100 мс, или интерфейс зависает: разделяет ли Spectron свою нить?)