iT邦幫忙

2021 iThome 鐵人賽

DAY 19
0
自我挑戰組

Rails測試寫起乃!!!系列 第 19

Day19 測試寫起乃 - 撰寫Cucumber

昨天講了安裝 Cucumber 以及基本語法今天我會拿一些範例來看看是如何寫的!

基本上每一句語句都會對應到一個建立的程式碼通常會搭配 FactoryBot 使用,我們會整理在features/step_definitions/integration.rb

假設我寫了 我開了一家店 那在專案中一定會看到有一處是

假如('我開了一家店') do
  # 這邊會產出一間店
end

規格書:

# language: zh-TW

@javascript @chrome @integration
功能: 結帳功能-商品限量購買
  背景: 我有一家店
    假如 我開了一家店
    而且 新增了一個運送方式
    而且 新增了一個付款方式
    而且 有一個顧客"CK"
    而且 商家有以下資料的商品
    | id | title    | price   |
    | 1  | 紅茶      | 100     |
    而且 商家有以下限購群組
    | id | title   | limit_count |
    | 1  | 限購紅茶 | 2           |

  場景: 購買一般商品超過限購數量
    假如 使用"CK"顧客帳號登入
    而且 我在商品列表頁
    當 我選擇"紅茶"加入購物車,數量為3
    而且 進入結帳頁面
    而且 完成結帳
    那麼 我會收到"「紅茶」最多只能購買 2 個。現在購物車中有 3 個。"而無法購買

  場景: 購買一般商品沒有超過限購數量可以結帳成功
    假如 使用"CK"顧客帳號登入
    而且 我在商品列表頁
    當 我選擇"紅茶"加入購物車,數量為1
    而且 進入結帳頁面
    而且 完成結帳
    那麼 我會跳轉到訂單頁

我們可以看到這份規格書 背景是 "我有一家店"

那麼可以知道我們必須要先新增一個 shop 而且 付款跟運送方式還有商品跟限購群組都要先建立出來才可以測試,也能告訴客戶這邊會使用到這些相關功能,而程式碼像是:

#假如 我開了一家店
假如('我開了一家店') do
  @shop = FactoryBot.create(:user_admin).shop
  end
  
#而且 新增了一個運送方式
而且('新增了一個運送方式') do
  FactoryBot.create(:price_based_shipping_rate, shipping_id: @shop.shipping.id)
end

那也會看到有些語句有使用 "" 包起來 其實就是變數的意思,可以隨意帶值進去並且在程式碼中使用{string} 接起來,數字的話就用{int}

#  當 我選擇"紅茶"加入購物車,數量為1
當('我在商品頁選擇{string}加入購物車,數量為{int}') do |title, quantity|
  add_product_to_cart(title, quantity)
end

當我們寫完一份規格書之後可以在終端機測試摟!

cucumber features/integration/checkout/limit_buy.feature


上一篇
Day18 測試寫起乃 - Cucumber 前置作業
下一篇
Day20 測試寫起乃 - $CHILD_STATUS
系列文
Rails測試寫起乃!!!30

尚未有邦友留言

立即登入留言