สแน็ปช็อต Cypress DOM และภาพที่สม่ำเสมอจะแตกต่างกันในระบบคลาวด์
บันทึกหน้าเมื่อการทดสอบล้มเหลว
Cyclope: บันทึกหน้าเต็มด้วยสไตล์หากการทดสอบ Cypress ล้มเหลว
ใช้ LocalStorage จากการทดสอบ Cypress เพื่อตั้งค่าข้อมูลเริ่มต้น
ทดสอบการลากรายการ
ความรู้เบื้องต้นเกี่ยวกับคำสั่ง cy.session
โบนัส 39: บันทึกหน้า HTML ทั้งหมดเมื่อการทดสอบล้มเหลว
เพิ่มปลั๊กอินนี้ในโครงการของคุณ สมมติว่า Cypress เป็นการพึ่งพา dev
$ npm i -D cyclope# หรือถ้าคุณชอบเส้นด้าย$ Yarn ให้เพิ่ม -D cyclope
รวมปลั๊กอินจากไฟล์สนับสนุนของคุณหรือไฟล์ข้อมูลจำเพาะแต่ละไฟล์
// ใน cypress/support/index.js// https://github.com/bahmutov/cyclopeimport 'cyclope'
// cypress.config.jsconst { DefinConfig } = ต้องการ('cypress')module.exports = DefinConfig({ e2e: {setupNodeEvents(on, config) { // https://github.com/bahmutov/cyclope need('cyclope/plugin')(on, config) // สิ่งสำคัญในการส่งคืนวัตถุ config // โดยมีการเปลี่ยนแปลงใดๆ ตัวแปรสภาพแวดล้อมส่งคืนการกำหนดค่า}, -
รวมปลั๊กอินจากไฟล์ปลั๊กอินของคุณ
// cypress/plugins/index.jsmodule.exports = (เปิด, config) => { // https://github.com/bahmutov/cyclope ต้องการ ('cyclope / ปลั๊กอิน') (เปิด, กำหนดค่า) // สิ่งสำคัญในการส่งคืนวัตถุการกำหนดค่า // พร้อมตัวแปรสภาพแวดล้อมที่เปลี่ยนแปลง ส่งคืนการกำหนดค่า}
หากคุณต้องการบันทึกหน้าแอปพลิเคชันเว็บปัจจุบัน รวมถึงทรัพยากรใดๆ
// cypress/integration/spec.jsit('บันทึกหน้า', () => { // คำสั่ง Cypress ปกติ cy.contains('.some-selector', 'some text').should('be.visible')// เมื่อแอปถึงสถานะที่ต้องการ// บันทึกเพจในโฟลเดอร์ "page".savePage(' หน้าหนังสือ')})
ทรัพยากรในเครื่องทั้งหมด เช่น รูปภาพและ CSS ควรบันทึกเป็นไฟล์ในเครื่อง คุณสามารถสร้างไฟล์ zip ได้
// ใช้นามสกุล .zip เพื่อ zip โฟลเดอร์ลงใน filecy.savePage('page.zip')
เมื่อบันทึกไฟล์ zip ฟังก์ชันจะให้วัตถุที่มีคุณสมบัติชื่อไฟล์ ความกว้าง และความสูง
removeIframes
(เท็จโดยค่าเริ่มต้น) จะลบองค์ประกอบ <iframe>
ทั้งหมดออกจากเพจก่อนที่จะบันทึก
cy.savePage('ชื่อ', { RemoveIframes: true })
ignoreFailedAssets
(เท็จโดยค่าเริ่มต้น) ละเว้นความล้มเหลวในกรณีที่ไม่สามารถโหลดเนื้อหาบางส่วนได้
cy.savePage ('ชื่อ', {ไม่สนใจFailedAssets: จริง })
โมดูลนี้มีฟังก์ชันยูทิลิตี้สำหรับบันทึกเพจหากการทดสอบล้มเหลว คุณสามารถใช้ฟังก์ชันนี้เป็น afterEach
hook ซึ่งอาจมาจากไฟล์สนับสนุน ดังนั้นจึงใช้ได้กับการทดสอบทั้งหมด
// ใน cypress/support/index.js// https://github.com/bahmutov/cyclopeimport { savePageIfTestFailed } จาก 'cyclope'afterEach(() => { savePageIfTestFailed() // ในกรณีที่ทรัพย์สินบางส่วนในโครงการของคุณเสียหาย savePageIfTestFailed ({ ไม่สนใจFailedAssets: จริง })})
ตามค่าเริ่มต้น เพจจะถูกบันทึกในโหมดไม่โต้ตอบเท่านั้น cypress run
หากคุณต้องการบันทึกเพจแม้ว่าจะทำงานในโหมด cypress open
ก็ตาม ให้ใช้ตัวเลือก saveInteractive
savePageIfTestFailed ({ saveInteractive: จริง })
หน้าทั้งหมดจะถูกบันทึกไว้ในโฟลเดอร์ cypress/failed/<spec name>/<test name>
เคล็ดลับ: เก็บ cypress/failed
ไว้เป็นสิ่งประดิษฐ์ทดสอบบน CI หากการทดสอบล้มเหลว ให้ดาวน์โหลดและเปิด folder/index.html
เพื่อตรวจสอบโครงสร้างของแอปพลิเคชันในขณะที่เกิดความล้มเหลว
นามแฝง clope
สร้างภาพ PNG ที่สอดคล้องกันโดยใช้บริการภาพ Cyclope ภายนอก ต้องใช้ตัวแปรสภาพแวดล้อม CYCLOPE_SERVICE_URL
และ CYCLOPE_SERVICE_KEY
เมื่อเรียกใช้ Cypress รองรับการโฮเวอร์
cy.get('#theme-switcher').realHover().cyclope('hover-over-sun.png')// บันทึกรูปภาพ "hover-over-sun.png" ที่สร้างขึ้น// Equitycy.get(' #theme-switcher').realHover()cy.clope()
หากคุณต้องการข้ามการอัปโหลด DOM และการสร้างอิมเมจหากไม่ได้กำหนดค่าบริการ Cyclope ให้ตั้งค่าตัวเลือกสภาพแวดล้อม Cypress เช่น การใช้ไฟล์ cypress.json
{ "env": {"cyclope": { "skipUploadWithoutUrl": true} - -
คุณสามารถเปิดใช้งานข้อความดีบักแบบละเอียดในเทอร์มินัลโดยใช้โมดูลดีบักได้โดยการรันการทดสอบด้วยตัวแปรสภาพแวดล้อม DEBUG=cyclope
$ DEBUG=cyclope npx cypress run
todo-app-for-cyclope
ซูโดกุจำลองโมดูล
ผู้แต่ง: Gleb Bahmutov <[email protected]> © 2021
@bahmutov
glebbahmutov.com
บล็อก
วิดีโอ
การนำเสนอ
ไซเปรสเคล็ดลับ
ใบอนุญาต: MIT - ทำอะไรก็ได้กับโค้ด แต่อย่าตำหนิฉันถ้ามันใช้งานไม่ได้
การสนับสนุน: หากคุณพบปัญหาใดๆ กับโมดูลนี้ โปรดส่งอีเมล / ทวีต / เปิดปัญหาบน Github
ลิขสิทธิ์ (c) 2021 Gleb Bahmutov <[email protected]>
อนุญาตให้บุคคลใดก็ตามที่ได้รับสำเนาของซอฟต์แวร์นี้และไฟล์เอกสารที่เกี่ยวข้อง ("ซอฟต์แวร์") อนุญาตโดยไม่เสียค่าใช้จ่าย เพื่อจัดการกับซอฟต์แวร์โดยไม่มีข้อจำกัด รวมถึงแต่ไม่จำกัดเพียงสิทธิ์ในการใช้ คัดลอก ปรับเปลี่ยน ผสาน เผยแพร่ แจกจ่าย ให้อนุญาตช่วง และ/หรือขายสำเนาของซอฟต์แวร์ และอนุญาตให้บุคคลที่ได้รับซอฟต์แวร์นี้สามารถทำได้ ภายใต้เงื่อนไขต่อไปนี้:
ประกาศเกี่ยวกับลิขสิทธิ์ข้างต้นและประกาศการอนุญาตนี้จะรวมอยู่ในสำเนาทั้งหมดหรือส่วนสำคัญของซอฟต์แวร์
ซอฟต์แวร์นี้มีให้ "ตามที่เป็น" โดยไม่มีการรับประกันใดๆ ทั้งโดยชัดแจ้งหรือโดยนัย ซึ่งรวมถึงแต่ไม่จำกัดเพียงการรับประกันความสามารถในการค้าขาย ความเหมาะสมสำหรับวัตถุประสงค์เฉพาะ และการไม่ละเมิด ไม่ว่าในกรณีใดผู้เขียนหรือผู้ถือลิขสิทธิ์จะต้องรับผิดต่อการเรียกร้องค่าเสียหายหรือความรับผิดอื่นใดไม่ว่าในการกระทำของสัญญาการละเมิดหรืออย่างอื่นที่เกิดขึ้นจากหรือเกี่ยวข้องกับซอฟต์แวร์หรือการใช้งานหรือข้อตกลงอื่น ๆ ใน ซอฟต์แวร์.