首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用柏木做contentwindow.print /用柏树测试printJS

如何用柏木做contentwindow.print /用柏树测试printJS
EN

Stack Overflow用户
提问于 2018-11-27 18:11:01
回答 2查看 3.3K关注 0票数 7

我的程序使用printJS,它是一个帮助格式化页面内容以供打印的库。我想用柏树编写测试,以测试是否调用了打印预览。目前,我有一个按钮在单击时调用printJS,而且由于柏树无法与打印预览窗口交互,所以我认为最好先对printJS的调用进行存根,然后编写一个断言,说明它曾经被调用过一次。我理解这与window.print()一起工作,因为您可以在这段代码中对其进行存根处理。

代码语言:javascript
复制
cy.visit('http://127.0.0.1/',{
    onBeforeLoad: (win) => {
        cy.stub(win, 'print')
    }
})

然后用这个断言

代码语言:javascript
复制
cy.contains('print').click()
cy.window().then((win) => {
    expect(win.print).to.be.calledOnce
})

我的旧纽扣

代码语言:javascript
复制
<button type="button" class="btn btn-secnodary" onclick="window.print()">
    Print
</button>

但是我使用的是printJS,这意味着我的按钮现在看起来像这样

代码语言:javascript
复制
<button type="button" onclick="printJS({printable: 'id_preview_modal_body', type: 'html'})" data-dismiss="modal">
    Print
</button>

javascript作为print.min.js加载,可以找到这里。我试图对内容窗口进行存根,但到目前为止,这似乎不起作用。在printJS的代码中,打印在这里进行

代码语言:javascript
复制
frameElement.contentWindow.print()

来自他们的github页面,第63行

我固执的方式给了这个问题

代码语言:javascript
复制
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

断言还会给出此错误。

代码语言:javascript
复制
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]是指他们的index.js 文件中的const printJS = print.init。但我不知道如何进一步调试这个问题。任何帮助都将不胜感激。谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-08 23:21:01

问题是onBeforeLoad钩子是在启动printJS之前调用的,当导入printJS时,它会调用它的init()函数,并在window.print中覆盖存根。

,这太快了,

代码语言:javascript
复制
cy.visit('http://127.0.0.1:8000/notices/new/',{
    onBeforeLoad: (win) => {
        cy.stub(win, 'printJS')
    }
})

组件加载和printJS启动后的存贮()

代码语言:javascript
复制
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
  })
})
票数 5
EN

Stack Overflow用户

发布于 2020-01-08 11:01:04

这是对我有效的解决方案。在我的例子中,我的页面上有一个打印按钮。我需要点击才能打开窗口。我把窗户撞了一下。

代码语言:javascript
复制
  cy.get('.white-header > .ui-g-12 > .pull-right').then((data) => {
  cy.window().then((win) => {
  cy.stub(win, 'open').returns("Print window is opened")
  data.click()
  expect(win.open).to.be.calledOnce
})
})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53505706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档