Como stub contentwindow.print com printJS cipreste / teste com cipreste

votos
3

Meu programa usa printJS que uma biblioteca que ajuda a formatar o conteúdo da página para impressão. Eu queria escrever testes com cipreste para testar se a visualização de impressão foi chamado. Atualmente tenho um botão que chama printJS quando clicado e desde cipreste não pode interagir com a janela de visualização de impressão, eu pensei que seria uma boa idéia para stub a chamada para printJS em seguida, escrever uma afirmação que foi chamado uma vez. Eu entendo que isso funciona com window.print (), como você pode stub que com este código.

cy.visit('http://127.0.0.1/',{
    onBeforeLoad: (win) => {
        cy.stub(win, 'print')
    }
})

Em seguida, afirmar com este

cy.contains('print').click()
cy.window().then((win) => {
    expect(win.print).to.be.calledOnce
})

Meu velho botão

<button type=button class=btn btn-secnodary onclick=window.print()>
    Print
</button>

Mas em vez disso eu usei printJS que significa meu botão agora se parece com isso

<button type=button onclick=printJS({printable: 'id_preview_modal_body', type: 'html'}) data-dismiss=modal>
    Print
</button>

O javascript é carregado em como print.min.js que podem ser encontrados aqui . Tentei stub o contentwindow mas que não parecem funcionar tão longe. No código para printJS, a impressão acontece aqui

frameElement.contentWindow.print()

a partir de sua página github , linha 63

A maneira im arrancando dá esta questão

cy.visit('http://127.0.0.1:8000/notices/new/',{
    onBeforeLoad: (win) => {
        cy.stub(win, 'printJS')
    }
})

Uncaught TypeError: Cannot stub non-existent own property printJS

A afirmação também dá esse erro

cy.window().then((win) => {
    expect(win.printJS).to.be.calledOnce
})

TypeError: [Function: init] is not a spy or a call to a spy!

Eu acho que o [Function: init]é um referindo-se const printJS = print.inita partir de seu index.js arquivo . Mas eu não sei como prosseguir na depuração esta questão. Qualquer ajuda seria apreciada. Obrigado!

Publicado 27/11/2018 em 18:11
fonte usuário
Em outras línguas...                            


1 respostas

votos
2

O problema é o onBeforeLoadgancho é chamado antes printJS é iniciada, quando printJS é importado invoca que é init()função e substitui o seu ramal em window.print.

Esta é arrancar muito em breve

cy.visit('http://127.0.0.1:8000/notices/new/',{
    onBeforeLoad: (win) => {
        cy.stub(win, 'printJS')
    }
})

Stubbing depois que o componente carregado e printJS é iniciada

const printStub

before(function(){

  cy.visit('http://127.0.0.1:8000/notices/new/')

  // maybe wait for loading to complete

  cy.window().then(win => {
    printStub = cy.stub(win, 'printJS')
  })
})

it('stubs printJS', () => {
  cy.contains('button', 'Print').click()
  cy.window().then(win => {
    expect(printStub).to.be.calledOnce
  })
})
Respondeu 08/12/2018 em 23:21
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more