Heim  >  Fragen und Antworten  >  Hauptteil

cy.spy, das die Funktion window.clearInterval überwacht

<p>In einer Anwendung, die ich entwickle, verwende ich setInterval und clearInterval. Ich möchte die Methode „clearInterval“ überwachen, um zu sehen, ob sie aufgerufen wird. Folgendes mache ich eigentlich: </p> <pre class="brush:php;toolbar:false;">beforeEach(() => { cy.clock(neues Datum()) }) it('Testszenario' => { const fn = cy.spy(document.defaultView, 'clearInterval') //Auch versucht fn = cy.spy(window, 'clearInterval') ... ... ... //Die Funktion „clearInterval“ wird beim Betreten des Abschnitts „then“ aufgerufen, aber der Stub meldet, dass sie noch nicht aufgerufen wurde cy.tick(30000).then(() => { erwarten(fn).to.have.been.calledOnce }) }) afterEach(() => { cy.clock().invoke('restore') })</pre> <p>Die Expect-Behauptung im obigen Snippet schlägt fehl, ich erwarte, dass sie erfolgreich ist. Ist meine Logik zur Initialisierung des Spions gültig/richtig? Für jede Hilfe bei dem oben genannten Problem sind wir sehr dankbar. </p>
P粉023326773P粉023326773430 Tage vor443

Antworte allen(1)Ich werde antworten

  • P粉745412116

    P粉7454121162023-08-18 10:40:22

    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
    })
    

    Antwort
    0
  • StornierenAntwort