0

既存のプロジェクトにテストを追加しています。広告の作成時に一意の URL が割り当てられたユーザー クラスがあり、その URL を含むパスにリダイレクトされます。

私は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
4

1 に答える 1