Как взаимодействовать с подтверждением диалогового окна в спецификации пакета Atom?
-
21-12-2019 - |
Вопрос
Вопрос
Какие варианты я должен писать спецификации для кода, который включает в себя взаимодействие с диалоговом окна подтверждения редактора атом?
фон
Я работаю над пакетом для атома, и у меня команда удалить файл, который затем нажимает изменения на сервер. Я хотел бы написать тест, чтобы подтвердить поведение команды, но у меня возникли проблемы с хорошим способом для моделирования нажатия кнопки «Отмена / в порядке» на диалоговом окне подтверждения
Командный код выглядит так, как этот
atom.workspaceView.command "mavensmate:delete-file-from-server", =>
# do setup stuff (build the params object)
atom.confirm
message: "You sure?"
buttons:
Cancel: => # nothing to do here, just let the window close
Delete: => # run the delete handler
@mm.run(params).then (result) =>
@mmResponseHandler(params, result)
.
То, что я не могу понять, - это то, как получить отмен или удаление обратных вызовов для запуска в спецификации. Я копал все спецификации атома и пропитав Google, но ничего не подходит. Я бы надеялся, что установив возврат к индексу обратного вызова, который я хочу пожарить, но мой обратный вызов кнопки удаления никогда не вызывается.
# Delete the metadata in the active pane from the server
describe 'Delete File from Server', ->
filePath = ''
beforeEach ->
# set up the workspace with a fake apex class
directory = temp.mkdirSync()
atom.project.setPath(directory)
filePath = path.join(directory, 'MyClass.cls')
spyOn(mm, 'run').andCallThrough()
waitsForPromise ->
atom.workspace.open(filePath)
it 'should invoke mavensmate:delete-file-from-server if confirmed', ->
spyOn(atom, 'confirm').andReturn(1)
atom.workspaceView.trigger 'mavensmate:delete-file-from-server'
expect(mm.run).toHaveBeenCalled()
.
Есть ли лучший способ имитировать пользователь, нажав кнопку на диалоговом окне подтверждения? Есть ли какие-либо обходные пути для получения этой тестирования?
Решение
Там нет хорошего способа имитировать взаимодействие с диалоговым окном подтверждения, если вы проходите в обратных вызовах с помощью кнопок, но если вы просто пропустите массив, а команда Trigger отвечает на это, то выможете написать спецификацию по желанию.
Кодовой код будет выглядеть так, как этот
atom.workspaceView.command "mavensmate:delete-file-from-server", =>
# do setup stuff (build the params object)
atom.confirm
message: "You sure?"
buttons: ["Cancel", "Delete"]
if answer == 1
@mm.run(params).then (result) =>
@mmResponseHandler(params, result)
.
и спецификация будет работать в текущей версии
# Delete the metadata in the active pane from the server
describe 'Delete File from Server', ->
filePath = ''
beforeEach ->
# set up the workspace with a fake apex class
directory = temp.mkdirSync()
atom.project.setPath(directory)
filePath = path.join(directory, 'MyClass.cls')
spyOn(mm, 'run').andCallThrough()
waitsForPromise ->
atom.workspace.open(filePath)
it 'should invoke mavensmate:delete-file-from-server if confirmed', ->
spyOn(atom, 'confirm').andReturn(1)
atom.workspaceView.trigger 'mavensmate:delete-file-from-server'
expect(mm.run).toHaveBeenCalled()
.