監視window.clearInterval函數的cy.spy
P粉023326773
P粉023326773 2023-08-17 12:16:34
0
1
475
<p>在我正在開發的應用程式中,我使用 setInterval 和 clearInterval。我想要監視 clearInterval 方法,以便查看是否呼叫了該方法。以下是我實際上在做的事情:</p> <pre class="brush:php;toolbar:false;">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') })</pre> <p>上面程式碼段中的 expect 斷言失敗,我期望它通過。我初始化 spy 的邏輯是否有效|正確?非常感謝對上述問題的任何幫助。 </p>
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
})
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板