Как взаимодействовать с диалоговым окном подтверждения в спецификации пакета атома?

Вопрос

Какие варианты я должен написать спецификации для кода, который включает взаимодействие с диалоговым окном подтверждения редактора атома?

Фон

Я работаю над пакетом для атома, и у меня есть команда удалить файл, который затем отправляет изменения на сервер. Я хотел бы написать тест для проверки поведения команды, но у меня возникли проблемы с поиском хорошего способа имитации нажатия кнопки «Отмена/ОК» в диалоговом окне подтверждения.

Код команды выглядит так

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()

Есть ли лучший способ имитировать нажатие пользователем кнопки в диалоговом окне подтверждения? Есть ли обходные пути для проверки этого?


person Ralph Callaway    schedule 29.07.2014    source источник


Ответы (1)


Кажется, не существует хорошего способа имитировать взаимодействие с диалоговым окном подтверждения, если вы передаете обратные вызовы с помощью своих кнопок, но если вы просто передаете массив и триггер команды отвечает на это, тогда вы можете написать спец по желанию.

Тогда код команды будет выглядеть так

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()
person Ralph Callaway    schedule 31.07.2014