Grunt Watch กับ Grunt PHPUnit มารัน PHPUnit อัตโนมัติดีกว่า

ใครที่กำลังหัดตั้งไข่กับการพัฒนาซอฟแวร์แบบ TDD (Test-Driven Development) สิ่งหนึ่งที่เราต้องทำอยู่บ่อยมากๆ ก็คือการรันคำสั่ง phpunit นั่นเองบ่อยแค่ไหนหน่ะเหรอ  หึหึ  ก็ทุกครั้งที่มีการแก้ไขหรือสร้างไฟล์ก็ว่าได้ ในเมื่อเราต้องทำมันตลอดอยู่แล้วทำไมไม่หาวิธีที่มันง่ายๆ ล่ะให้มันรันอัตโนมัติตอนที่เราบันทึกไฟล์เป็นไง ^^

สำหรับเพื่อนๆ ที่ยังไม่ค้นเคยกับ Grunt สามารถเข้าไปดูวิธีการติดตั้งได้ที่ Getting Started เมื่อติดตั้ง grunt  เรียบร้อยแล้ว ต่อไปก็ติดตั้ง grunt plugin 2 ตัวครับ โดยเข้าไปที่โฟลเดอร์งาน (project) ของเราก่อน

  1. grunt-contrib-watch 
    npm install grunt-contrib-watch --save-dev
  2. grunt-phpunit 
    npm install grunt-phpunit --save-dev

จากนั้นก็สร้างไฟล์ Gruntfile.js ไว้ที่โฟลเดอร์งานของเรานี่แหละครับ เพื่อตั้งค่าให้กับ plugin ครับ

module.exports = function (grunt) {
  grunt.initConfig({
    phpunit: {
      unit: {
        dir: '/workspace/katas' //ตรงนี้ให้เปลี่ยนเป็นโฟลเดอร์งานนะครับ อย่าลืมๆ
      },
      options: {
        bin: 'phpunit',
        colors: true
      }
    },
    watch: {
      scripts: {
        files: ['**/*.php'],
        tasks: ['phpunit'],
        options: {
          spawn: false,
        },
      },
    },
  });
  grunt.loadNpmTasks('grunt-phpunit');
  grunt.loadNpmTasks('grunt-contrib-watch');
};

dir: ให้เป็นโฟลเดอร์ที่เก็บไฟล์ php ที่เราต้องการรันนะครับเป็น path เต็มเลย อย่างของผมก็จะเป็นโฟลเดอร์ katas

มาดูหน้าตาของโฟลเดอร์ของเราว่าหน้าตาจะประมาณไหน

grunt-watch-phpunit-directories-structureถึงตรงนี้ก็จะเป็นการเปิดใช้งาน  grunt-watch  เอาไว้ก่อน โดยเปิด command-line และเข้าไปที่โฟลเดอร์งานของเราครับ ของผมก็จะเป็นโฟลเดอร์  katas จากนั้นก็รันคำสั่ง grunt watch  ไว้ครับ

grunt watch

เท่านี้ก็เรียบร้อยครับ การรันคำสั่ง  grunt watch เหมือนบอกว่าให้เราจับตาดูไฟล์ php ที่อยู่ในโฟลเดอร์งานของเราว่ามีการแก้ไข เพิ่มหรือลบรึป่าว ถ้ามีก็ให้รันคำสั่ง  phpunit ครับ

running-grunt-watch

เท่านี้เราก็ไม่ต้องมาคอยพิมพ์คำสั่ง phpunit ทุกครั้งที่มีการแก้ไขไฟล์แล้ว  ^^