昨天講了安裝 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