你必須很努力

Day19 - Ruby on Rails 測試篇 - RSpec

2020/09/24
字數統計: 711閱讀時間: 2 min

前言

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

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


如何安裝

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

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

1
2
3
4
# Gemfile
gem 'rspec-rails', '~> 4.0.0'

# 記得要 bundle

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

1
2
3
4
rails generate rspec:install

# 也可縮寫成
rails g rspec:install

產生範例 spec

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

1
rails g rspec:scaffold user

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

備註:

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

如何執行

終端機輸入

1
2
3
4
5
6
7
8
9
10
11
12
# 跑全部的測試
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

1
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/

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

原文連結:https://riverye.com/2020/09/24/Day19-Ruby-on-Rails-測試篇-RSpec/

發表日期:2020-09-24

更新日期:2022-09-23

CATALOG
  1. 1. 前言
  2. 2. 如何安裝
  3. 3. 產生範例 spec
    1. 3.0.1. 備註:
  • 4. 如何執行
  • 5. 如何讓 CI 也能跑 rspec
  • 6. 推薦網站
  • 7. 小結