Может ли 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 свою нить?)

0 ответов

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