监视window.clearInterval函数的cy.spy
P粉023326773
P粉023326773 2023-08-17 12:16:34
0
1
375

在我正在开发的应用程序中,我使用 setInterval 和 clearInterval。我想要监视 clearInterval 方法,以便查看是否调用了该方法。以下是我实际在做的事情:

beforeEach(() => { cy.clock(new Date()) }) it('测试场景' => { const fn = cy.spy(document.defaultView, 'clearInterval') //也尝试过 fn = cy.spy(window, 'clearInterval') ... ... ... //进入`then`部分时会调用 clearInterval 函数,但存根报告它尚未被调用 cy.tick(30000).then(() => { expect(fn).to.have.been.calledOnce }) }) afterEach(() => { cy.clock().invoke('restore') })

上面代码段中的 expect 断言失败,我期望它通过。我初始化 spy 的逻辑是否有效|正确?非常感谢对上述问题的任何帮助。

P粉023326773
P粉023326773

全部回复 (1)
P粉745412116

Cypress在测试和应用程序中使用不同的windowcy.spy(window...使用的是测试窗口,但要对应用程序窗口进行监视,您需要使用cy.window()命令。

let spy; cy.window().then(appWindow => { spy = cy.spy(appWindow, 'clearInterval') }) ... later expect(spy).to.have.been.calledOnce

但可能还会有另一个复杂性,因为cy.clock()clearInterval()放在代理中,以便可以控制应用程序的定时函数,所以您可能无法对其进行监视。

如果发现仍然无法正常工作,请获取cy.clock()的返回值,并查看是否附有调用信息。

let clock; beforeEach(() => { clock = cy.clock(new Date()) })

或者指定clearInterval不应该被代理

beforeEach(() => { cy.clock(new Date(), ['Date', 'setInterval']) // 仅代理Date和setInterval })
    最新下载
    更多>
    网站特效
    网站源码
    网站素材
    前端模板
    关于我们 免责声明 Sitemap
    PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!