recherche

Maison  >  Questions et réponses  >  le corps du texte

cy.spy qui surveille la fonction window.clearInterval

<p>Dans une application que je développe, j'utilise setInterval et clearInterval. Je souhaite surveiller la méthode clearInterval pour voir si elle est appelée. Voici ce que je fais réellement : </p> <pre class="brush:php;toolbar:false;">beforeEach(() => { cy.clock (nouvelle date ()) }) it('Scénario de test' => { const fn = cy.spy(document.defaultView, 'clearInterval') // J'ai également essayé fn = cy.spy(window, 'clearInterval') ... ... ... //La fonction clearInterval est appelée lors de l'entrée dans la section `then`, mais le stub signale qu'elle n'a pas encore été appelée cy.tick(30000).then(() => { s'attendre à ce que (fn).soit.été.appeléune fois }) }) aprèsEach(() => { cy.clock().invoke('restaurer') })</pré> <p>L'assertion expect dans l'extrait ci-dessus échoue, je m'attends à ce qu'elle réussisse. Ma logique d'initialisation de l'espion est-elle valide/correcte ? Toute aide concernant le problème ci-dessus est grandement appréciée. </p>
P粉023326773P粉023326773542 Il y a quelques jours507

répondre à tous(1)je répondrai

  • P粉745412116

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

    Cypress utilise différentes windowcy.spy(window...使用的是测试窗口,但要对应用程序窗口进行监视,您需要使用cy.window()commandes dans les tests et les applications.

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

    Mais il pourrait y avoir une autre complication, car cy.clock()clearInterval() est placé dans le proxy afin que vous puissiez contrôler les fonctions chronométrées de l'application, vous ne pourrez donc peut-être pas la surveiller.

    Si vous constatez que cela ne fonctionne toujours pas correctement, veuillez obtenir la valeur de retour de cy.clock() et voir si des informations d'appel sont jointes.

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

    ou précisez que clearIntervalne doit pas être mandaté

    beforeEach(() => {
      cy.clock(new Date(), ['Date', 'setInterval'])  // 仅代理Date和setInterval
    })
    

    répondre
    0
  • Annulerrépondre