Моя программа использует printJS - библиотеку, которая помогает форматировать содержимое страницы для печати.Я хотел написать тесты на кипарисе, чтобы проверить, был ли вызван предварительный просмотр.В настоящее время у меня есть кнопка, которая вызывает printJS при нажатии, и поскольку cypress не может взаимодействовать с окном предварительного просмотра печати, я подумал, что было бы неплохо заблокировать вызов printJS, а затем написать утверждение, что он был вызван один раз.Я понимаю, что это работает с window.print (), так как вы можете заглушить это с помощью этого кода.
cy.visit('http://127.0.0.1/',{
onBeforeLoad: (win) => {
cy.stub(win, 'print')
}
})
Затем подтвердите с помощью этого
cy.contains('print').click()
cy.window().then((win) => {
expect(win.print).to.be.calledOnce
})
Моя старая кнопка
<button type="button" class="btn btn-secnodary" onclick="window.print()">
Print
</button>
Но вместо этого я использовал printJS, что означает, что моя кнопка теперь выглядит следующим образом
<button type="button" onclick="printJS({printable: 'id_preview_modal_body', type: 'html'})" data-dismiss="modal">
Print
</button>
Javascript загружается как print.min.js, который можно найти здесь .Я попытался заглушить окно контента, но пока что это не работает.В коде для printJS печать происходит здесь
frameElement.contentWindow.print()
с их страницы github , строка 63
Способ, которым я его ошарашиваю, дает эту проблему
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
Утверждение также дает эту ошибку
cy.window().then((win) => {
expect(win.printJS).to.be.calledOnce
})
TypeError: [Function: init] is not a spy or a call to a spy!
Я думаю, [Function: init]
- это ссылка на const printJS = print.init
из их index.js
файла .Но я не знаю, как дальше отлаживать эту проблему.Любая помощь будет оценена.Спасибо!