五大 HTTP 動詞對應方法,簽名一致:
get(action, parameters = nil, session = nil, flash = nil)
post(action, parameters = nil, session = nil, flash = nil)
put(action, parameters = nil, session = nil, flash = nil)
delete(action, parameters = nil, session = nil, flash = nil)
head(action, parameters = nil, session = nil, flash = nil)
action:Symbol 或 String,控制器動作名稱parameters:Hash,對應 paramssession:Hash,預設 session 資料flash:Hash,預設 flash 資料get :index
get :add_to_cart, :id => @product.id
post :save_order, :order => { :name => 'Fred', :email => 'fred@example.com' },
:session => { :user_id => 1 }, :flash => { :notice => 'Welcome!' }
| 方法 | 用途 | 範例 |
|---|---|---|
assert_response(type, msg=nil) | 驗證 HTTP 狀態碼類別 | assert_response :successassert_response 200assert_response :redirect (300-399) |
assert_redirected_to(options, msg=nil) | 驗證導向目標 | assert_redirected_to :action => 'index'assert_redirected_to :controller => 'login', :action => 'login'assert_redirected_to "https://example.com/page" |
assert_template(expected, msg=nil) | 驗證渲染模板 | assert_template 'store/index'assert_template 'layouts/application' |
assert_response 符號對應:
:success → 200-299:redirect → 300-399:missing → 404:error → 500-599assert_tag(conditions)
conditions 為 Hash,支援鍵值:
| 鍵 | 說明 | 範例 |
|---|---|---|
:tag | 標籤名稱 | assert_tag :tag => 'html' |
:content | 文字內容匹配 | assert_tag :content => "Welcome" |
:attributes | 屬性 Hash 匹配 | assert_tag :tag => 'div', :attributes => { :class => 'error' } |
:parent | 父節點條件 | assert_tag :tag => 'head', :parent => { :tag => 'html' } |
:child | 第一個直屬子節點 | assert_tag :tag => 'html', :child => { :tag => 'head' } |
:ancestor | 任一祖先節點 | assert_tag :tag => 'div', :ancestor => { :tag => 'form' } |
:descendant | 任一子孫節點 | assert_tag :tag => 'form', :descendant => { :tag => 'input' } |
:children | 子節點集合條件 | 見下方 |
assert_tag :tag => 'ul',
:children => { :count => 1..3, # 子節點數量範圍
:less_than => 4, # 少於 4 個
:greater_than => 0, # 多於 0 個
:only => { :tag => 'li' } # 僅計算 li 標籤
}
請求執行後自動可用:
| 變數 | 型別 | 說明 | 範例 |
|---|---|---|---|
assigns(key) | Hash-like | 控制器實例變數 | assert_not_nil assigns(:products) |
session | Hash | Session 資料 | assert_equal 2, session[:cart].items.size |
flash | Hash | Flash 資料 | assert_equal "Login required", flash[:notice] |
cookies | Hash | Cookies | assert_equal "Fred", cookies[:name] |
redirect_to_url | String | 完整導向 URL | assert_equal "https://test.host/login", redirect_to_url |
注意:assigns 鍵值需用 Symbol(:products),字串鍵("products")在某些版本不支援。
https://api.rubyonrails.com/classes/Test/Unit/Assertions.html