Day19 — Ruby on Rails 測試篇 — RSpec

被端走的小菜
3 min readSep 23, 2020

--

身為一名 Ruby on Rails 工程師,幾乎都有寫過 RSpec
測試本身與開發是一樣重要的,有聽過一詞是開發時間緊迫,沒時間寫測試
要趕在截止日前完成功能,都要來不及了,有空再補…(通常就是沒下文
後續的維護成本、技術債反而會更高,
且要修改時,若有測試涵蓋的話,也比較不用擔心改 A 壞 B,
還能幫助你避開低級錯誤 (像是語法錯誤等)

後續的文章會以此 repo 作為範例

如何安裝

放在 :development, :test group 裡面,或參考此 commit

參考資料: https://relishapp.com/rspec/rspec-rails/docs

# Gemfile
gem 'rspec-rails', '~> 4.0.0'
# 記得要 bundle

接著再終端機輸入,可參考此 commit

rails generate rspec:install# 也可縮寫成
rails g rspec:install

產生範例 spec

由於之前已經透過 scaffold 建立 User
欲透過指令補產生相關測試檔案的話,在終端機輸入以下

rails g rspec:scaffold user

若不透過指令,也可手動新增檔案,或參考此 commit

備註:

  1. 原本我也不知道要這樣下指令,透過 rails g -h 的技巧,看有哪些參數可以使用 (若不清楚,可以看前面寫的 Linux 指令文章 manhelptldr,非常受用的技巧)
  2. 若已經有先裝 RSpec ,透過 scaffold 產生檔案時,便會一起產生 spec.rb 的相關檔案

如何執行

終端機輸入

# 跑全部的測試
rspec
rspec spec
# 跑特定資料夾的測試
rspec spec/routing/
# 跑特定檔案的測試
rspec spec/routing/users_routing_spec.rb
# 跑特定檔案某一個測試
rspec spec/routing/users_routing_spec.rb:22

如何讓 CI 也能跑 rspec

將原本 CI 設定檔新增以下,可參考此 commit

bundle exec rspec

推薦網站

想提升自己 RSpec 寫法的話,可參考 Better Specs 此網站

小結

測試非常的重要,但也別把測試當萬靈丹,它只能幫忙測出有涵蓋到的情境 (假設測試的情境、準備的答案、寫的測試都是對的),依然無法測出沒想到的情境,未來再修改 code 時,也可能發現原本考量的情境已經變了,這時便需要調整測試本身

測試本身,其實就可以寫成 30 天的文章,自成一個生態圈,且還有許多相關的 Gem 相輔相成,像是 factory_botDatabase CleanertimecopCapybaraSimpleCovFakeRedis…等,將來有機會再視情況寫成文章…

本篇其實寫的蠻精簡的 XD (逃,下篇會講另一個測試套件 Cucumber

鐵人賽文章連結:https://ithelp.ithome.com.tw/articles/10242906
medium 文章連結:https://link.medium.com/M8qWBUbd19
本文同步發布於 小菜的 Blog https://riverye.com/

備註:之後文章修改更新,以個人部落格為主

--

--

被端走的小菜
被端走的小菜

Written by 被端走的小菜

大家好,我是被端走的小菜。以個人部落格更新為主:https://riverye.com/

No responses yet