cari

Rumah  >  Soal Jawab  >  teks badan

cy.spy yang memantau fungsi window.clearInterval

<p>Dalam aplikasi yang saya sedang bangunkan, saya menggunakan setInterval dan clearInterval. Saya mahu memantau kaedah clearInterval untuk melihat sama ada ia dipanggil. Inilah yang sebenarnya saya lakukan: </p> <pre class="brush:php;toolbar:false;">beforeEach(() ==> { cy.clock(Tarikh baharu()) }) it('Senario ujian' => { const fn = cy.spy(document.defaultView, 'clearInterval') //Juga mencuba fn = cy.spy(window, 'clearInterval') ... ... ... //Fungsi clearInterval dipanggil apabila memasuki bahagian `then`, tetapi stub melaporkan bahawa ia belum dipanggil lagi cy.tick(30000).then(() =>{ jangkakan(fn).untuk.telah.dipanggilSekali }) }) afterEach(() => { cy.clock().invoke('restore') })</pre> <p>Penegasan jangkaan dalam coretan di atas gagal, saya menjangka ia akan lulus. Adakah logik saya untuk memulakan pengintip itu sah|betul? Sebarang bantuan dengan isu di atas amat dihargai. </p>
P粉023326773P粉023326773493 hari yang lalu477

membalas semua(1)saya akan balas

  • P粉745412116

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

    Cypress menggunakan windowcy.spy(window...使用的是测试窗口,但要对应用程序窗口进行监视,您需要使用cy.window()perintah yang berbeza dalam ujian dan aplikasi.

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

    Tetapi mungkin terdapat komplikasi lain, kerana cy.clock()clearInterval() diletakkan dalam proksi supaya anda boleh mengawal fungsi masa aplikasi, jadi anda mungkin tidak dapat memantaunya.

    Jika anda mendapati ia masih tidak berfungsi dengan baik, sila dapatkan nilai pulangan cy.clock() dan lihat jika terdapat maklumat panggilan yang dilampirkan.

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

    atau nyatakan bahawa clearIntervaltidak boleh diproksikan

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

    balas
    0
  • Batalbalas