Angular คือ ตอนที่ 14 : การทดสอบ (Testing)

  1. ความสำคัญของการทดสอบ
  2. การทดสอบหน่วย (Unit Testing)กับ Jasmine
  3. การทดสอบแบบครบวงจรด้วย Protractor
  4. การทดสอบอัตโนมัติ (Automating Testing) ด้วย Karma

ในอุตสาหกรรมเทคโนโลยีที่เปลี่ยนแปลงอย่างรวดเร็วในปัจจุบัน การรับรองคุณภาพและความน่าเชื่อถือของแอปพลิเคชันของคุณเป็นสิ่งสำคัญยิ่ง ความจริงนี้ใช้ได้กับทุกภาคส่วนและเทคโนโลยีทั้งหมด ในบรรดาเทคโนโลยีต่างๆ ที่มีอยู่สำหรับการทำเว็บ Angular และทำแอพ ซึ่งพัฒนาโดย Google ได้กลายเป็นเครื่องมือยอดนิยมและทรงพลัง

เมื่อทำเว็บ Angular และทำแอพหรือแม้แต่ทำเว็บ Angular และทำแอพที่ซับซ้อน การรวมการทดสอบเข้ากับกระบวนการพัฒนาของคุณถือเป็นสิ่งสำคัญ โชคดีที่ AngularJS ได้รับการออกแบบโดยคำนึงถึงการทดสอบตั้งแต่ต้น ทำให้การทำเว็บ Angular และทำแอพที่เชื่อถือได้และแข็งแกร่งนั้นง่ายขึ้นอย่างมาก บทความนี้จะเจาะลึกเข้าไปในโลกแห่งการทดสอบแอปพลิเคชัน AngularJS โดยใช้ประโยชน์จากเครื่องมืออย่าง Jasmine และ Karma

1. ความสำคัญของการทดสอบ

ก่อนที่เราจะดำเนินการต่อ สิ่งสำคัญคือต้องเข้าใจว่าเหตุใดการทดสอบจึงเป็นส่วนสำคัญของการพัฒนาซอฟต์แวร์ ในฐานะนักพัฒนา เป็นเรื่องง่ายที่จะมองเห็นทันเนลและมุ่งเน้นไปที่การเขียนโค้ดเพียงอย่างเดียว แต่การทดสอบคือสิ่งที่รับประกันว่าโค้ดของเราจะทำงานตามที่คาดไว้ มีเครือข่ายความปลอดภัย เพื่อให้แน่ใจว่าการเปลี่ยนแปลงหรือเพิ่มเติมใดๆ จะไม่ทำลายฟังก์ชันที่มีอยู่โดยไม่ได้ตั้งใจ ในระยะยาว กลยุทธ์การทดสอบที่มีประสิทธิภาพสามารถช่วยประหยัดเวลาได้มาก ป้องกันข้อผิดพลาดไม่ให้ไปถึงการผลิต และรักษาคุณภาพโดยรวมของโค้ดเบส

2. การทดสอบหน่วย (Unit Testing)กับ Jasmine

เมื่อเราพูดถึงการทดสอบใน AngularJS สิ่งแรกที่ควรนึกถึงคือการทดสอบหน่วย การทดสอบหน่วยหมายถึงการทดสอบแต่ละองค์ประกอบหรือฟังก์ชันของแอปพลิเคชันของคุณแบบแยกส่วน เมื่อทำเว็บ Angular และทำแอพแนวคิดคือการเขียนการทดสอบสำหรับตัวควบคุม คำสั่ง บริการ และส่วนประกอบอื่นๆ เพื่อยืนยันว่าทำงานอย่างอิสระตามที่คาดไว้

เฟรมเวิร์กการทดสอบของ Jasmine เป็นเครื่องมือที่นำมาใช้กันอย่างแพร่หลายสำหรับการเขียนการทดสอบหน่วยใน JavaScript และทำงานได้ดีเป็นพิเศษกับ AngularJS Jasmine มีฟังก์ชันในการจัดโครงสร้างการทดสอบและการยืนยันของคุณเพื่อตรวจสอบพฤติกรรมของโค้ดของคุณ

ในการเริ่มใช้ Jasmine ก่อนอื่น ให้ติดตั้งลงในโปรเจ็กต์ของคุณด้วย npm:

npm install --save-dev jasmine

เมื่อติดตั้ง Jasmine แล้ว คุณสามารถเริ่มเขียนแบบทดสอบของคุณได้ นี่คือตัวอย่างการทดสอบ Jasmine อย่างง่าย:

describe('MyController', function() {
    var $controller;

    beforeEach(angular.mock.module('myApp'));

    beforeEach(inject(function(_$controller_){
        $controller = _$controller_;
    }));

    it('adds two numbers correctly', function() {
        var $scope = {};
        var controller = $controller('MyController', { $scope: $scope });
        expect($scope.addTwoNumbers(1, 2)).toEqual(3);
    });
});

ในตัวอย่างนี้ เรากำลังทดสอบฟังก์ชัน addTwoNumbers ภายใน MyController เพื่อให้แน่ใจว่ามีการบวกเลขสองตัวอย่างถูกต้อง เราใช้ describe ฟังก์ชันเพื่อจัดกลุ่มการทดสอบของเรา beforeEach ฟังก์ชันเพื่อตั้งค่าสถานะสำหรับการทดสอบของเรา และฟังก์ชัน it เพื่อกำหนดการทดสอบแต่ละรายการ ฟังก์ชัน นี้expectใช้ร่วมกับฟังก์ชันจับคู่ ( toEqualในกรณีนี้) เพื่อยืนยันผลการทดสอบ

3. การทดสอบแบบครบวงจรด้วย Protractor

ในขณะที่การทดสอบหน่วยเน้นที่ส่วนประกอบแต่ละส่วน การทดสอบแบบ end-to-end (E2E) จะจำลองการโต้ตอบของผู้ใช้และตรวจสอบให้แน่ใจว่าส่วนประกอบทั้งหมดของแอปพลิเคชันของคุณทำงานร่วมกันอย่างถูกต้อง สำหรับ AngularJS เครื่องมือสำหรับการทดสอบ E2E คือ Protractor

Protractor เป็นโปรแกรม Node.js ที่สร้างขึ้นบน WebDriverJS และได้รับการออกแบบมาโดยเฉพาะสำหรับแอปพลิเคชัน AngularJS เข้าใจโครงสร้างของ AngularJS และสามารถรอให้ AngularJS เสร็จสิ้นการเรนเดอร์หรือแก้ไขคำสัญญาได้โดยอัตโนมัติ ลดความไม่สม่ำเสมอที่มักเกี่ยวข้องกับการทดสอบ E2E

นี่คือตัวอย่างง่ายๆ ของการทดสอบ Protractor :

describe('Protractor Demo', function() {
    it('should add a todo', function() {
        browser.get('https://your-angular-website.com');

        element(by.model('todoList.todoText')).sendKeys('write first protractor test');
        element(by.css('[value="add"]')).click();

        var todoList = element.all(by.repeater('todo in todoList.todos'));
        expect(todoList.count()).toEqual(1);
        expect(todoList.get(0).getText()).toEqual('write first protractor test');
    });
});

ในการทดสอบนี้ เรากำลังจำลองการกระทำของผู้ใช้ที่เพิ่มรายการสิ่งที่ต้องทำลงในรายการ เราใช้ browser วัตถุของ Protractor เพื่อนำทางไปยังแอปพลิเคชัน element และ by เพื่อโต้ตอบกับองค์ประกอบต่างๆ และ expect เพื่อตรวจสอบผลลัพธ์ การทดสอบแบบ end-to-end นี้ช่วยให้แน่ใจว่าไม่เพียงแค่ส่วนประกอบแต่ละส่วนของแอปพลิเคชันเท่านั้น แต่ยังรวมถึงการผสานการทำงานตามที่คาดไว้

4. การทดสอบอัตโนมัติ (Automating Testing) ด้วย Karma

ในขณะที่ Jasmine และโปรแทรกเตอร์จัดเตรียมเฟรมเวิร์กสำหรับการเขียนแบบทดสอบ คุณยังต้องการนักวิ่งทดสอบเพื่อดำเนินการ นี่คือที่มาของกรรม

Karma เป็นตัวทดสอบสำหรับ JavaScript ที่สามารถดำเนินการทดสอบในเบราว์เซอร์จริงหลายตัว ทำให้เหมาะสำหรับการทดสอบ AngularJS ด้วย Karma คุณสามารถเรียกใช้การทดสอบทุกครั้งที่คุณบันทึกไฟล์ เพื่อให้มั่นใจว่าคุณจะได้รับคำติชมทันทีทุกครั้งที่คุณทำการเปลี่ยนแปลง

การตั้งค่า Karma เกี่ยวข้องกับการติดตั้งผ่าน npm และสร้างไฟล์กำหนดค่า Karma:

npm install karma --save-dev
karma init karma.conf.js

หลังจากตั้งค่าคอนฟิกูเรชันแล้ว คุณสามารถเริ่ม Karma:

karma start karma.conf.js

การดำเนินการนี้จะเปิดเบราว์เซอร์ที่คุณระบุในการกำหนดค่า รันการทดสอบ และรายงานผลลัพธ์ พลังแห่งกรรมอยู่ในระบบอัตโนมัติ เมื่อตั้งค่าแล้ว คุณไม่จำเป็นต้องเริ่มการทดสอบด้วยตนเอง — Karma จะดูแลทุกครั้งที่คุณบันทึกโค้ด ทำให้เป็นเครื่องมือที่ขาดไม่ได้ในกล่องเครื่องมือทดสอบ AngularJS ของคุณ


การทดสอบมีบทบาทที่ขาดไม่ได้ในวงจรการพัฒนาซอฟต์แวร์ เมื่อทำเว็บ Angular และทำแอพด้วย AngularJS คุณควรตรวจสอบให้แน่ใจเสมอว่าโค้ดของคุณได้รับการทดสอบอย่างดี Jasmine และโปรแทรกเตอร์มอบเฟรมเวิร์กอันทรงพลังสำหรับหน่วยการเขียนและการทดสอบตั้งแต่ต้นทางถึงปลายทาง ตามลำดับ ในขณะที่ Karma ช่วยลดความยุ่งยากในการดำเนินการทดสอบเหล่านี้ ด้วยการใช้ประโยชน์จากเครื่องมือเหล่านี้ คุณจะมั่นใจได้ถึงความทนทานและความน่าเชื่อถือของแอปพลิเคชัน AngularJS ของคุณ ซึ่งจะมอบประสบการณ์ผู้ใช้ที่เหนือกว่า

การเปิดรับแนวทางการพัฒนาที่ขับเคลื่อนด้วยการทดสอบอาจดูท้าทายในขั้นต้น แต่ประโยชน์ที่ได้รับในการรักษาคุณภาพของโค้ดและลดข้อบกพร่องในอนาคตนั้นมีมากมายมหาศาล นี่เป็นก้าวสำคัญสู่แนวทางปฏิบัติในการพัฒนาวิชาชีพ ซึ่งเป็นสัญญาณของงานฝีมือที่มีคุณภาพในโลกของการพัฒนาซอฟต์แวร์ ดังนั้น เริ่มทดสอบแอปพลิเคชัน AngularJS ของคุณวันนี้ และวางใจได้เมื่อรู้ว่าโค้ดของคุณสร้างมาให้ใช้งานได้นาน


Angular คืออะไร (AngularJS)

Angular คือ ตอนที่ 13 : สร้างคำขอ HTTP (HTTP Requests)