iT邦幫忙

2023 iThome 鐵人賽

DAY 25
0
SideProject30

用 Rails 打造你的電商網站系列 第 25

Day 25 - 假資料夢工廠

  • 分享至 

  • xImage
  •  

在實際寫測試之前,想介紹幾個套件

以及我們該怎麼做出測試所需要的假資料

Faker

一個很方便做假資料的套件

專案安裝完就可以使用了

裡面可以產出隨機的假資料

基本資料如地址、姓名

潮流到美劇劇名、角色都有

可以說是測試必備的好用工具

Factory Bot

幫我們做出假資料的工廠(?

通常會搭配 Faker 去做

本身提供了很多的方法

我們就直接進入正題!

為什麼要做假資料?

當我們開始跑測試的時候,

測試所撈的資料是從測試環境的資料庫撈

不過我們在開發的時候只會在開發環境建立資料

當然不會跑去測試環境建立資料

所以我們必須在測試環境寫好要建哪些假資料

在跑測試之前先建立起來

才能符合我們所設想的情境

Factory Bot 提供了哪些方法

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 的官方文件


上一篇
Day 24 - 測試很重要!
下一篇
Day 26 - 測測你寫的程式碼!
系列文
用 Rails 打造你的電商網站30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言