![](/img/trans.png)
[英]How to assign or pass value to the instance variable in controller from rspec controller?
[英]Pass instance variable to controller test in rspec?
我正在添加測試現有項目。 我有一個在創建廣告上分配了唯一網址的用戶類,然后被重定向到包含該網址的路徑。
我正在關注rspec書並編寫了這個測試
it 'redirects to users#show' do
post :create, user: attributes_for(:guest)
expect(response).to redirect_to guest_path(:guest)
end
我在運行測試時得到了這個。
Expected response to be a redirect to <http://test.host/guest/guest> but was a redirect to <http://test.host/guest/h7gutr1CMYxa5VNgWH5l1A>
控制器發回的重定向是正確的,但我顯然是錯誤地編寫了測試。 如何改變通過測試的期望?
編輯:更近一點,但仍然沒有。 運用
expect(response).to redirect_to guest_path(assigns(:user))
得到:
Expected response to be a redirect to <http://test.host/guest/1> but was a redirect to <http://test.host/guest/zaOVsiPBwQ4yNnC0mJNoNA>
使用:
expect(response).to redirect_to guest_path(assigns(:user))
得到:
NoMethodError:
undefined method `url' for :user:Symbol
解:
我無法弄清楚如何在實例變量上調用方法。 它是這樣完成的:
it 'redirects to users#show' do
post :create, user: attributes_for(:guest)
expect(response).to redirect_to guest_path(assigns(:user).url)
end
嘗試這個:
it 'redirects to users#show' do
post :create, user: attributes_for(:guest)
expect(response).to redirect_to guest_path(assigns(:guest))
end
在這種情況下, assigns(:guest)
將等於實例變量,其名稱與您正在測試的請求返回的參數( :guest
)相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.