在 PHPUnit 中測試需要 closure 的函式

不知道你有沒有在開發 PHP 程式的過程中,測試過需要使用 anonymous function 或 closure 的函式或類別方法?我在開發自己的函式庫時,就遇到了需要測試 closure 是否被正確調用的問題。

在解決幾個問題後,我發現其實做法並不難,所以接下來我就來介紹幾個測試 closure 的方式。

閱讀更多

利用 PHPUnit 與 Mink 來做 Web 測試

如果你面對的是以前舊有的 PHP 程式,是時候負起一些責任了。

我知道它改起來很痛苦,一堆不良的 PHP 程式習慣都阻礙你的修正;使得每次調整功能時,到底改得對不對,得要等到上線才知道。想要重寫一個新版本,但太多的實作細節你不清楚;也沒有最新的規格文件,讓你無法為新版本做出功能無誤的保證。

現在你唯一擁有的,就是已經在線上運作的程式邏輯;雖然它可能還有 bug ,但至少大多數的功能是通過使用者驗證的。那麼先為它買個保險吧!確保之後的修改不會影響到其他功能的正常運作;而最直接的方式,就是把目前程式邏輯所呈現的結果或是使用者的操作,寫成自動化 Web 測試。

建立 Web 測試的方法有很多,這裡我將介紹我在實務上使用 PHPUnit 加上 Mink 搭配 PhantomJS 的方法。

閱讀更多

這樣寫測試錯了嗎?

這篇文章的出現,主要是因為尤川豪的 PHP與撰寫測試入門 一文,然後在 Facebook 上也有相關討論:連結一連結二

只是當我提出測試不該有邏輯時,討論就往該不該有 assertion library 偏過去了。我發現我太執著在這個點上,沒有正確地自己的想法傳達清楚。

所以接下來我會從幾個層面來討論測試該怎寫,將我想表達的觀念重新整理一下。

閱讀更多

邁向 PHP 重構之路 - 以 Laravel 程式碼片段為例

來上 TDD 課的學員問到一個 Laravel 程式碼重構的問題,這裡簡單地做分享。未來如果有好的實戰範例,這系列就會延續下去。

閱讀更多

在 Laravel 上用 MailCatcher 發送測試信件

雖然 Laravel 在寄送測試信件上提供了 Mailgun 這個服務的串接方式,不過如果能夠在 Homestead 就可以直接測試是更棒的選擇;而 MailCatcher 剛好就提供這樣的功能,它能啟動一個 SMTP 模擬服務,並且讓我們透過 Web 介面來查看信件是否有被發送出來。

註:類似的工類還有用 Go 寫的 MailHog ,據說速度更快;雖然我還沒試過,但我想用法應該是相同的。

以下就簡單介紹一下如何在 Laravel 5.1 上使用 MailCatcher 。

閱讀更多

Laravel 5.1 Events Broadcasting 實務練習

Laravel 5.1 提供了一個非常棒的 Events Broadcasting 特色,它能讓開發者建立一個 RealTime Web App 。作者 Taylor 也錄製了一個 Events Broadcasting 的教學影片,讓開發者可以更快瞭解這個新功能。

教學影片中雖然是使用 Pusher 服務來做事件推送,不過 Laravel 也可以搭配 Redis 來做到同樣的事情。考量到未來的系統發展,我打算採用 Redis 來當做事件推送伺服器,所以本文也會在此基礎進行說明。

以下就來介紹如何用 Laravel 的 Events Broadcasting 來實作一個簡單的聊天室。

閱讀更多

幾個有興趣的前端框架

如果你像我一樣是一個對 UI 開發不那麼在行,或是無法花太多時間在 UI 設計的 Web 開發者,但卻想能夠快速建立一個可用的 UI 介面,那麼最快的方法就是借重別人寫好的前端框架。

這裡我對前端框架的定義是包含了頁面排版、風格樣式、 UI 元件等,不限純 CSS ,可以包含 JavaScript 。

本文從以前我所使用及目前研究的幾個前端框架,依照研究的深入程度,由深至淺來簡單分享我個人的一些分析心得。至於優缺點,完全是個人主觀意見,大家參考看看即可。

閱讀更多

Laravel 5.1 正式釋出

經過了幾個月的等待, Laravel 5.1 終於在美國時間 6/9 正式釋出了。同時 Laracasts 也推出了一系列的 Laravel 5.1 新功能介紹,絕對是每位 Artisan 必看的影片。

官方也介紹了 5.1 有哪些新特色 ,以下我會簡單介紹它們。

閱讀更多

在 Mac OS X 上搭建 Selenium 測試環境

在開發網站的過程中,因為需要測試介面以模擬使用者的操作,最理想的工具就是 Selenium 了。

現在我是用 Mac 來當做開發環境,所以簡單記錄一下如何在 OS X 上建立 Selenium 測試環境。

Selenium 的簡單原理與應用可以參考:自動測試與 TDD 實務開發 - 上課心得 (中)

閱讀更多

自動測試與 TDD 實務開發 - 上課心得 (下)

第三週是這門課程的最後一堂課,上完課的我心裡其實有很大的衝擊,一直不知道該怎麼整理這最後的心得;就好像美妙的音樂感動了你的心靈,但自己一時之間卻很難重現那樣的弦律。

前兩週講師介紹了單元測試基礎以及如何重構舊有程式之後,但我們依舊面臨了一個很大的問題,那就是:「我們寫出來的程式,不見得就是我們所想的;而就算符合我們想的,也不見得是需求要的。」

「嘿!你沒睡好嗎?上星期提的搜尋功能你應該完成了吧?」
「嗯,我昨天加班完成了,還加上了測試,應該很完美,你試試。」

不久後...

「怎麼我搜尋『特價』這個字,沒有出現特價商品的類別頁?」
「不是吧?搜尋結果應該是獨立的搜尋列表呀!這不是 common sense 嗎?」
「不對不對,你應該在我搜尋『特價』的時候,直接導到特價商品頁就好了。」
「靠!這兩回事吧?而且你給的的需求只有搜尋商品而已,剩下的要我自己腦補喔?」

如果這種戲碼常常在辦公室上演的話,浪費的可不只是開發人員的時間呀!面對不清不楚的需求,或是雙方對需求的認知上有所誤解,甚至開發人員「善意地」加入根本不在需求裡的程式碼,這些問題都將可能拖垮整個專案的進度!

所以最後一週,講師為我們帶來了整套課程的高潮:不僅僅是以規格來完成程式碼,更能用規格來自動驗證你的程式碼!

閱讀更多