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

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 ทุกครั้งที่มีการแก้ไขไฟล์แล้ว  ^^