在實際寫測試之前,想介紹幾個套件
以及我們該怎麼做出測試所需要的假資料
一個很方便做假資料的套件
專案安裝完就可以使用了
裡面可以產出隨機的假資料
基本資料如地址、姓名
潮流到美劇劇名、角色都有
可以說是測試必備的好用工具!
幫我們做出假資料的工廠(?
通常會搭配 Faker 去做
本身提供了很多的方法
我們就直接進入正題!
當我們開始跑測試的時候,
測試所撈的資料是從測試環境的資料庫撈
不過我們在開發的時候只會在開發環境建立資料
當然不會跑去測試環境建立資料
所以我們必須在測試環境寫好要建哪些假資料
在跑測試之前先建立起來
才能符合我們所設想的情境
Factory Bot 提供了各種建立假資料的方法,舉凡單一資料建立、關聯資料建立、多筆資料建立,都可以滿足
將該資料所需要的欄位以及值填入,
通常我會先設定必填的欄位,
選填的就會用其他方式設定,
稍後會介紹
以下是一個簡單的範例:
factory
後面要加你要建立的資料
例如我今天要建立一筆 User
的資料,後面就要加 :user
下面就設定你要事先建立的假資料
FactoryBot.define do
factory :user do
email { Faker::Internet.email }
password { 'password' }
name { Faker::Name.name }
end
end
這筆資料跟其他 model 的資料有關聯
我們也可以在 Factory Bot
中完成
方式非常簡單,就是在剛剛設定假資料的地方設定
我們來看以下範例:
如果我們只給 user
他就會去找 user 的 factory 並且建立一個 user
profile 的 user 就會是剛建立的那個
FactoryBot.define do
factory :profile do
name { Faker::Name.name }
phone { "0912345678" }
address { Faker::Address.street_address }
user
end
end
我們在建立假資料的時候,可能會希望根據角色或者情境不同,渲染不一樣的資料
這時候 trait
就非常好用
來看以下範例
我們將飲品分成兩個 trait ,
同樣的飲品名稱,
可能會因為產地的不同、時效遠近而有價錢上的差異
所以就區分成一個昂貴,一個便宜
FactoryBot.define do
factory :drink do
name { Faker::Name.name }
description { Faker::Artist.name }
end
trait :expensive do
price { Faker::Number.between(from: 150, to: 200) }
end
trait :cheap do
price { Faker::Number.between(from: 50, to: 100) }
end
end
有時候在測試的時候會需要一次展現多筆假資料
Factory Bot 也能幫我們做到!
我們來看以下範例:
假設一個 user 有很多個 profile
我們可以用 create_list
來作出多個 profile
不過因為是先有 user
才會有 profile
所以我們必須要在 create user 之後才做
在 trait
裡面需要寫個 callback
讓 user create 之後來做出兩個 profile,並且加上關聯
FactoryBot.define do
factory :user do
email { Faker::Internet.email }
password { 'password' }
name { Faker::Name.name }
end
trait :has_many_profiles do
after :create do
create_list :profile, 2, user:
end
end
end
基本上比較常用到的方法是上述這些,但如果你有其他更不一樣的需求,可以看看 Factory Bot 的官方文件