¿Cómo interactuar con el diálogo de confirmación en la especificación del paquete Atom?
-
21-12-2019 - |
Pregunta
Pregunta
¿Qué opciones tengo para escribir especificaciones para código que implica interactuar con un cuadro de diálogo de confirmación del editor Atom?
Fondo
Estoy trabajando en un paquete para Atom y tengo un comando para eliminar un archivo que luego envía los cambios al servidor.Me gustaría escribir una prueba para validar el comportamiento del comando, pero tengo problemas para encontrar una buena manera de simular hacer clic en el botón cancelar/Aceptar en el cuadro de diálogo de confirmación.
El código de comando se ve así
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)
Lo que parece que no puedo entender es cómo hacer que cancelar o eliminar devoluciones de llamada se ejecute en una especificación.He estado investigando todas las especificaciones atómicas y buscando en Google, pero parece que no aparece nada.Esperaba que funcionara configurar el retorno al índice de la devolución de llamada que quiero activar, pero nunca se llama a la devolución de llamada del botón de eliminación.
# 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()
¿Existe una mejor manera de imitar al usuario haciendo clic en un botón en el cuadro de diálogo de confirmación?¿Existe alguna solución para hacer esta prueba?
Solución
No parece haber una buena manera de simular la interacción con un cuadro de diálogo de confirmación si está pasando en devoluciones de llamada con sus botones, pero si simplemente pasa una matriz, y tiene el comando disparador responder a eso, entoncesPuede escribir una especificación como desee.
El código de comando se vería así
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)
y la especificación funcionaría en su versión actual
# 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()