selvi ile servi / test printJS ile contentwindow.print saplama için nasıl

oy
3

Benim program kullanan printJS yardımcı olan bir kitaplık baskı için sayfanın içeriğini biçimlendirmek. Ben baskı önizleme anılmış test etmek selvi ile testler yazmak istedim. Şu anda tıkladım ve selvi baskı önizleme penceresi ile etkileşim olamaz çünkü ben onu o zaman bir kez çağrıldı iddiasıyla yazma printJS çağrısı saplama için iyi bir fikir olacağını düşündüm printJS çağıran bir düğme vardır. Sana bu kodla o saplama gibi bu window.print () ile çalışır anlıyoruz.

cy.visit('http://127.0.0.1/',{
    onBeforeLoad: (win) => {
        cy.stub(win, 'print')
    }
})

Sonra bununla iddia

cy.contains('print').click()
cy.window().then((win) => {
    expect(win.print).to.be.calledOnce
})

Eski düğmesi

<button type=button class=btn btn-secnodary onclick=window.print()>
    Print
</button>

Ama bunun yerine benim düğmesi artık şuna benzer anlamına gelir printJS kullanılan

<button type=button onclick=printJS({printable: 'id_preview_modal_body', type: 'html'}) data-dismiss=modal>
    Print
</button>

Javascript bulunabilir print.min.js olarak yüklenen alır burada . Ben contentwindow saplama için çalıştı ama o ana kadar çalışmak görünmüyor. PrintJS için kodunda, baskı burada olur

frameElement.contentWindow.print()

dan onların github sayfasından , satır 63

Bunu stubbing yolu im bu sorunu veriyor

cy.visit('http://127.0.0.1:8000/notices/new/',{
    onBeforeLoad: (win) => {
        cy.stub(win, 'printJS')
    }
})

Uncaught TypeError: Cannot stub non-existent own property printJS

iddiası da bu hatayı veriyor

cy.window().then((win) => {
    expect(win.printJS).to.be.calledOnce
})

TypeError: [Function: init] is not a spy or a call to a spy!

Bence [Function: init]bir atıfta olan const printJS = print.initonların arasından index.js dosyası . Ama bu sorunu ayıklama içinde daha fazla devam etmek nasıl bilmiyorum. Herhangi bir yardım mutluluk duyacağız. Teşekkürler!

Oluştur 27/11/2018 saat 18:11
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
2

Sorundur onBeforeLoadprintJS içe aktarıldığında o var çağırır, printJS başlatılmadan önce kanca denir init()fonksiyonu ve içinde saplama üzerine yazar window.print.

Bu, çok yakında stubbing edilir

cy.visit('http://127.0.0.1:8000/notices/new/',{
    onBeforeLoad: (win) => {
        cy.stub(win, 'printJS')
    }
})

bileşen sonra Stubbing yüklendikten ve printJS başlatılır

const printStub

before(function(){

  cy.visit('http://127.0.0.1:8000/notices/new/')

  // maybe wait for loading to complete

  cy.window().then(win => {
    printStub = cy.stub(win, 'printJS')
  })
})

it('stubs printJS', () => {
  cy.contains('button', 'Print').click()
  cy.window().then(win => {
    expect(printStub).to.be.calledOnce
  })
})
Cevap 08/12/2018 saat 23:21
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more