簡體   English   中英

將實例變量傳遞給rspec中的控制器測試?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM