ถ้าProtractorกำลังแทนที่ Angular Scenario Runner สำหรับการทดสอบ E2E นั่นหมายความว่าฉันจะยังสามารถใช้กับKarmaเป็นกรอบการทดสอบ E2E ของฉันได้หรือไม่
ถ้าProtractorกำลังแทนที่ Angular Scenario Runner สำหรับการทดสอบ E2E นั่นหมายความว่าฉันจะยังสามารถใช้กับKarmaเป็นกรอบการทดสอบ E2E ของฉันได้หรือไม่
คำตอบ:
ไม่แนะนำโดยผู้ดูแลปัจจุบันของไม้โปรแทรกเตอร์:
https://github.com/angular/protractor/issues/9#issuecomment-19927049
ไม่ควรใช้ไม้โปรแทรกเตอร์และกรรมร่วมกัน แทนที่จะจัดเตรียมระบบแยกต่างหากสำหรับการทดสอบ ไม้โปรแทรกเตอร์และกรรมครอบคลุมแง่มุมต่าง ๆ ของการทดสอบ - Karma มีไว้สำหรับการทดสอบหน่วยเป็นส่วนใหญ่ในขณะที่ไม้โปรแทรกเตอร์ควรใช้สำหรับการทดสอบตั้งแต่ต้นจนจบ
ไม้โปรแทรกเตอร์สร้างขึ้นบน WebDriverJS ซึ่งใช้เซิร์ฟเวอร์ Selenium / WebDriver เพื่อจัดเตรียมเบราว์เซอร์และขับเคลื่อนการทดสอบ ตัวอย่างของ WebDriverJS แท้สามารถพบได้ที่นี่: http://code.google.com/p/selenium/wiki/WebDriverJs
และ
https://github.com/angular/protractor/issues/9#issuecomment-19931154
Georgios - ฉันคิดว่ามันสมเหตุสมผลแล้วที่จะแยก Protractor และ Karma ออกจากกัน - สำหรับการทดสอบแบบ end to end คุณต้องการการขับเคลื่อนเหตุการณ์แบบเนทีฟและความยืดหยุ่นของ webdriver ในขณะที่สำหรับการทดสอบหน่วยคุณต้องการการดำเนินการที่รวดเร็วและการจับคู่ไฟล์อัตโนมัติ
อัปเดต นี่คือแพคเกจที่ง่ายฉันได้สร้างเพื่อเพิ่มการติดตั้งกรรมน้อยที่สุดเพื่อโครงการใด ๆ npm install min-karma
ที่มีคำสั่งเดียว
ผมอยากจะชี้แจงความเข้าใจผิดไปได้บางอย่างเกี่ยวกับกรรมและไม้โปรแทรกเตอร์ คำถามที่พบบ่อยเกี่ยวกับ KarmaหมายถึงAdapter สำหรับ Angular's Scenario Runnerซึ่งดูเหมือนว่าจะถูกละทิ้งโดยแนะนำให้ใช้Protractorแทน
กรรมคือการวิ่งทดสอบที่จะเรียกใช้งาน JavaScriptไฟล์ที่ระบุไว้ในคุณแฟ้มการกำหนดค่าอย่างชัดเจนหรือใช้โหนด globs (สำหรับผู้ที่ไม่ JavaScript แม่แบบภายนอก , เชิงมุมคู่มือหน่วยทดสอบแนะนำให้ใช้พลังน้ำใจ HTML preprocessorเพื่อรวบรวมไว้ใน JavaScript แรก.)
เหล่านี้สามารถเป็นทุกไฟล์ที่มาของคุณบางส่วนของพวกเขาบางส่วนของพวกเขาบวกบางเพิ่มเติมไฟล์หรือไฟล์ที่ไม่เกี่ยวข้องกับโครงการของคุณให้เพียงบางส่วนกำหนดค่าพิเศษ - คุณชื่อมัน! คุณสามารถมีไฟล์กำหนดค่ากรรมหลายไฟล์สำหรับวัตถุประสงค์ที่แตกต่างกันซึ่งคุณสามารถเรียกใช้แบบขนานหรือทีละไฟล์ กระบวนการกรรมแต่ละเปิดตัวชุดของตัวเองของเบราว์เซอร์(เหล่านี้มีอยู่ในปัจจุบัน)
คุณลักษณะนี้ของKarma ที่จะเรียกใช้ไฟล์เพียงชุดเดียวคือสิ่งที่ทำให้เหมาะสำหรับการทดสอบอย่างรวดเร็วที่ทำงานในพื้นหลังในการแก้ไขไฟล์ต้นฉบับแต่ละครั้งและรับข้อเสนอแนะทันทีซึ่งยอดเยี่ยมมาก! ข้อเสียอย่างเดียวคือการรายงานข้อผิดพลาด "มีเสียงดัง" ซึ่งหวังว่าจะดีขึ้น!
การทดสอบหน่วยใช้สำหรับซอร์สโค้ดหน่วยเดียวของคุณ ในกรณีของ Angular หน่วยทั่วไปคือ Angular Component ( Service, Factory, Provider, Controller, Filter, Directive
ฯลฯ ) จำเพื่อให้คุณControllers
บางการทดสอบหน่วยดังนั้นหลายเกินไปสำหรับ latters เป็นธงสีแดง
ในการทดสอบหน่วยหน่วยรหัสอื่น ๆ ทุกหน่วยที่หน่วยนี้ขึ้นอยู่ (ที่เรียกว่าการอ้างอิงของหน่วย) ไม่ควรทดสอบในเวลาเดียวกัน แต่ควรถูก "ล้อเลียน" เช่นแทนที่ด้วยสิ่งที่เรียบง่ายเช่นอินสแตนซ์หลอก เชิงมุมให้การสนับสนุนสภาพแวดล้อมที่ดีเยาะเย้ย ตามหลักการแล้วคุณต้องการเห็นการเยาะเย้ยเหล่านั้นทั้งหมดโดยตรงในการทดสอบของคุณดังนั้นคุณไม่จำเป็นต้องสงสัยว่าการอ้างอิงทั้งหมดมาจากไหน
Karmaมีประโยชน์เช่นเดียวกับการทดสอบการผสานรวมซึ่งมีการทดสอบกลุ่มของหน่วยซอร์สโค้ดร่วมกันโดยมีการเยาะเย้ยการอ้างอิงเพียงบางส่วนเท่านั้น สิ่งสำคัญคือต้องจำไว้ว่าการพึ่งพาใด ๆ เป็นค่าเริ่มต้นที่มาจากโมดูลซอร์สโค้ดของคุณ (ตราบใดที่โมดูลเหล่านั้นฉีดเข้าไปในการทดสอบของคุณโดยตรงหรือเป็นการอ้างอิงของโมดูลอื่น ๆ ที่ฉีดเข้าไป (ซึ่งในกรณีนี้คุณไม่จำเป็นต้องฉีดเข้าไป แต่ไม่เป็นอันตรายต่อการทำเช่นนั้น) การอ้างอิงที่เยาะเย้ยจะแทนที่สิ่งที่ระบุไว้
ทำงานได้อย่างรวดเร็วและบ่อยครั้งเป็นคุณสมบัติหลักของกรรม ซึ่งหมายความว่าคุณต้องการหลีกเลี่ยงการร้องขอของเซิร์ฟเวอร์แบบสอบถามฐานข้อมูลใด ๆ ที่อาจใช้เวลานานกว่าเศษเสี้ยววินาที ( มิฉะนั้นมันจะไม่เป็นอย่างรวดเร็ว! ) ผู้กระบวนการที่มีความยาวคนที่คุณต้องการที่จะเยาะเย้ย นอกจากนี้ยังอธิบายว่าเหตุใดจึงเป็นแนวทางปฏิบัติที่ไม่ดีในการนำบริการระดับต่ำเช่น$http
ภายในคอนโทรลเลอร์ของคุณโดยตรงหรือหน่วยตรรกะทางธุรกิจที่ซับซ้อน ด้วยการรวมบริการการสื่อสารภายนอกระดับต่ำเหล่านั้นไว้ในบริการเฉพาะที่มีขนาดเล็กคุณจะทำให้ "เยาะเย้ยออกไป" ได้ง่ายขึ้นมาก
สิ่งที่Karma ไม่ทำคือการเรียกใช้ไซต์ของคุณอย่างที่เป็นอยู่ซึ่งเป็นการทดสอบแบบ End-to-End (E2E) โดยหลักการแล้วคุณสามารถใช้วิธีการภายในของ Angular เพื่อสร้างไซต์หรือชิ้นส่วนของไซต์ขึ้นมาใหม่ ซึ่งสำหรับชิ้นเล็ก ๆ จะมีประโยชน์และเป็นวิธีที่รวดเร็วเช่นการทดสอบคำสั่ง
อย่างไรก็ตามไม่แนะนำวิธีการโยนรหัสที่ซับซ้อนในการทดสอบของคุณ ยิ่งคุณทำมากเท่าไหร่โอกาสที่คุณจะเกิดข้อผิดพลาดในโค้ดนั้นก็มีมากขึ้นแทนที่จะเป็นสิ่งที่คุณกำลังทดสอบจริงๆ
$http
นั่นคือเหตุผลที่ผมเองไม่ชอบวิธีที่ซับซ้อนมักจะกล่าวถึงวิธีการทดสอบโดยใช้วิธีการในระดับต่ำเช่น มันทำงานได้ดีกว่าในการแยกการอ้างอิงถึงวิธีการระดับต่ำออกเป็นวิธีการเฉพาะของคุณเองซึ่งมีหน้าที่รับผิดชอบเพียงอย่างเดียวคือการร้องขอ http วิธีการเฉพาะเหล่านี้น่าจะใช้ได้กับแบ็กเอนด์จริงไม่ใช่ของปลอม! ซึ่งคุณสามารถทดสอบได้อย่างง่ายดาย - ด้วยตนเองหรือแม้กระทั่งอย่างสมบูรณ์แบบด้วยKarma ที่ทำงานร่วมกับconfig พิเศษอื่นตราบใดที่คุณไม่ผสม config นั้นกับที่มักจะใช้ในการรันKarmaสม่ำเสมอและรวดเร็ว ขณะนี้การทดสอบบริการขนาดเล็กโดยเฉพาะของคุณคุณสามารถเยาะเย้ยได้อย่างปลอดภัยและง่ายดายเพื่อทดสอบตรรกะอื่น ๆ ของคุณและนำการทดสอบเหล่านี้ไปใช้ในการตั้งค่าKarmaตามปกติของคุณ
เพื่อสรุป ใช้Karmaเพื่อเรียกใช้ไฟล์ JavaScript ชุดใดก็ได้ มัน (ควรจะ) เร็ว คุณไม่เห็นแอปที่สมบูรณ์จึงไม่สามารถทดสอบผลลัพธ์สุดท้ายได้อย่างมีประสิทธิภาพและเชื่อถือได้ ฉันจะเรียกใช้ด้วยไม้โปรแทรกเตอร์หรือไม่? ทำไมฉัน? เล่นProtractorจะชะลอตัวลงทดสอบของฉันชนะวัตถุประสงค์ของกรรม ง่ายต่อการเรียกใช้ไม้โปรแทรกเตอร์แยกกัน
ไม้โปรแทรกเตอร์คือ:
กรอบการทดสอบ end-to-end สำหรับแอปพลิเคชัน AngularJS ไม้โปรแทรกเตอร์จะทำการทดสอบกับแอปพลิเคชันของคุณที่ทำงานในเบราว์เซอร์จริงโดยโต้ตอบกับแอปพลิเคชันในแบบเดียวกับผู้ใช้
ไม้โปรแทรกเตอร์จึงทำในสิ่งที่Karmaไม่มี - เรียกใช้แอปพลิเคชันสุดท้ายที่แท้จริงของคุณ สิ่งนี้เผยให้เห็นทั้งพลังและข้อ จำกัด :
การเรียกใช้แอปพลิเคชันที่สมบูรณ์เป็นการทดสอบขั้นสุดท้ายที่เชื่อถือได้เพียงอย่างเดียวว่าแอปพลิเคชันของคุณทำงานได้ตามที่คาดไว้ คุณสามารถเขียนสถานการณ์เรื่องราวของผู้ใช้ที่สมบูรณ์และนำไปทดสอบได้!
แต่จะยากกว่าในการติดตามข้อผิดพลาดโดยไม่แยกหน่วยของซอร์สโค้ดแต่ละหน่วย นี่คือเหตุผลที่คุณยังต้องใช้Karmaเพื่อทดสอบโค้ด JavaScript ของคุณก่อน
ตอนนี้ฉันต้องการเรียกใช้Protractorด้วยKarmaหรือไม่? ฉันสามารถเรียกใช้มันในหน้าต่างเทอร์มินัลแยกต่างหากในแบบขนาน โดยหลักการแล้วฉันสามารถให้พวกเขาแชร์ไฟล์ทดสอบได้หากจำเป็น แต่โดยปกติฉันไม่ต้องการ ทำไม? เพราะฉันต้องการให้การทดสอบของฉันมีขนาดเล็กโดยมีวัตถุประสงค์เฉพาะอย่างเดียว
ยกเว้นอย่างเดียวคือไฟล์กำหนดมาโครการทดสอบที่มีประโยชน์สำหรับนักวิ่งทั้งสองคน นี้ แต่จะไม่เป็นไฟล์ทดสอบแต่ไฟล์การกำหนดมาโคร
นอกเหนือจากนั้นฉันชอบการแยกที่ชัดเจนระหว่างการทดสอบของฉัน สิ่งเหล่านี้ต้องทำงานบ่อยและเร็วและสำหรับแอปที่สมบูรณ์ ที่ทำให้แยกชัดเจนระหว่างเมื่อใช้พลังน้ำใจและเมื่อไม้โปรแทรกเตอร์
Karma เป็นนักวิ่งทดสอบที่จัดทำโดยทีม Angular Karma จะดำเนินการทดสอบของคุณในหลายเบราว์เซอร์ซึ่งจะทำให้มั่นใจได้ว่าแอปพลิเคชันของเราเข้ากันได้กับทุกเบราว์เซอร์ การทดสอบหน่วยสำหรับ js เชิงมุมสามารถใช้กรรม + จัสมิน
จัสมินเป็นกรอบการทดสอบหน่วยจาวาสคริปต์และจะให้ยูทิลิตี้สำหรับทดสอบแอปพลิเคชันของเรา วิธีนี้ทำงานได้ดีที่สุดในเฟรมเวิร์กเชิงมุมดังนั้นเราจึงเลือกใช้ "เครื่องมือทดสอบหน่วยอัตโนมัติ" https://github.com/shahing/testingangularjs
และ Protractor เป็นกรอบการทดสอบแบบ end-to-end สำหรับแอปพลิเคชัน Angular และ AngularJS ไม้โปรแทรกเตอร์ทำการทดสอบกับแอปพลิเคชันของคุณที่ทำงานในเบราว์เซอร์จริงเบราว์เซอร์ที่ไม่มีหัวการทดสอบข้ามเบราว์เซอร์และสามารถโฮสต์บนจานรองได้
ใช่คุณสามารถใช้กรรมและไม้โปรแทรกเตอร์ร่วมกัน Karma ใช้สำหรับการทดสอบหน่วยส่วนประกอบที่คุณสร้างขึ้นโดยใช้คำสั่งเชิงมุมซึ่งคุณสามารถทดสอบส่วนประกอบเหล่านั้นโดยใช้กรรม ไม้โปรแทรกเตอร์ใช้สำหรับการทดสอบแบบ end to end ส่วนใหญ่จะใช้สำหรับการทดสอบ UI