Rails Capybara Feature Testing 踩雷日記

用一句話形容今天,大概是「第一次學 Capybara 踩地雷就上手」,花了整整六小時(以上)在寫兩個簡單的測試,途中遇到各種有趣的地雷,不寫一篇文章紀錄這慘烈的一天我怕今天氣到睡不著覺。 先聲明,這是第一次寫測試,所以有些觀念可能是錯誤或過舊的,歡迎大家留言告知,一定立刻修改,這不是一篇技術文,而是一篇發洩文(怒)

首先遇到的問題,是 Firefox 版本和 Selenium webdriver 對不上的問題,據同事說明因為 Selenium webdriver 沒有支援最先版的 Firefox,所以如果你跟我一樣想用 Selenium 來執行 Capybara 的話,請使用 Firefox ESR 版本。

Firefox ESR:https://www.mozilla.org/en-US/firefox/organizations/faq/

安裝完之後也別忘記要設定 Firefox ESR 所在的位置,才能夠讓 Capybara 抓到 Firefox 而不是用 webkit 來測試,大家可能會想說路徑不就:

/Applications/Firefox\ ESR.app

最開始我也是這樣認為的,直到後面發現我的測試一片慘紅,錯誤訊息觀察應該是 JavaScript 的錯,找了三個多小時,搞到最後把 Git Commit 版本一個個往回推終於找到錯誤所在的 commit,誰知道一行一行檢查了三次還是沒看到問題… 錯誤的程式碼大概像下面這樣:

function hi(name="") {
  console.log(name)
}

我看著這程式來來回回看了很久,用 Chrome 和 Firefox 測試也都成功,況且他不是應該用 Firefox ESR 執行嗎? 明明我打開 Firefox ESR 一行錯誤都沒有,Capybara 是在搞什麼飛機!!!!!

最後強大的我同事又說了一句話: Capybara 用的 webkit 是很舊版的,不支援 Default Value 的寫法。

很好,恩,很好… 所以提醒大家,如果你遇到 Capybara 莫名其妙一直噴錯,檢查一下事不是你的 JS Function 用了預設值QQ

function hi(name) {
  console.log(name)
}

但就算這樣也不對呀,Capybara 不是應該要用 Firefox ESR 嗎,怎麼最後卻是用 webkit 呢? 各位客官,Capybara 在設定 browser 時,要填完整的路徑,以 Mac 為例應該是:

/Applications/Firefox\ ESR.app/Contents/MacOS/firefox

看似大功告成了很開心(?) 誰知道換上 Firefox 又是慘紅一片,不過好歹錯誤訊息有變化了,這次遇到的是 Chrome 太勇猛,新的 Spec 都搶第一支援;要注意,JS 次方的運算大部分人可能會想到這樣寫:

console.log(10**3);

在最新版 Chrome 這樣很完美,但如果是 Firefox 的話就會遇到錯誤囉,建議安全的寫法是:

console.log(Math.pow(10, 3));

因為 ** 這種寫法是最新支援的,截至目前為止似乎只有 Chrome 支援(淚)也由此可知測試真的很重要,如果不是測試,根本不會發現這麼多的問題,說實話要用人力去測試過去的所有瀏覽器也不太可行。

好,寫完了,我要去吃晚餐了。

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料