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 :
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') }) 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.
Cypress utilise différentes
window。cy.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.calledOnceMais 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 })