RSpec を使用してコントローラから変数値をテストする際に問題が発生しました。
関連するコントローラ コード:
class ToysController < ApplicationController
def claim
toy = Toy.find(params[:toy_id])
current_user.toys << toy
toy.status = "claimed"
render :index
end
end
これは間違いなくうまくいきputs toy.inspect
ます。しかし、私はそれをテストすることはできません。多くの面倒な試行の後、現在のテストは次のようになります。
require 'spec_helper'
describe ToysController do
describe "GET 'claim'" do
let(:james) {create(:user)}
let(:toy) {create(:toy)}
before do
OmniAuth.config.mock_auth[:google] = {
uid: james.uid
}
session[:user_id] = james.id
end
it "can be claimed by a user" do
get :claim, toy_id: toy.id
assigns(:toy).user.should eq james.id
end
end
end
テストを実行すると、それが Nilでassigns(:toy).user.should
あることを示すさまざまなエラーが表示されます。ドキュメントが見つからなかったため、さまざまな方法で構文をtoy
いじってみました。assigns
私は何を間違っていますか?コントローラーがユーザーとそれに渡されたおもちゃに対して何をするかを確認する正しい方法は何ですか?
編集:インスタンス変数に段階的に移行しようとしていますが、それでもうまくいきません。インスタンス変数を使用したコードを次に示します (変数名は異なりますが、結果は同じです)。
アイデア コントローラ:
def claim
@idea = Idea.find(params[:idea_id])
current_user.ideas << @idea
@idea.status = "claimed"
render :index
end
テスト:
describe "GET 'claim'" do
let(:james) {create(:user)}
let(:si_title) {create(:idea)}
before do
OmniAuth.config.mock_auth[:google] = {
uid: james.uid
}
session[:user_id] = james.id
end
it "can be claimed by a user" do
get :claim, idea_id: si_title.id
puts assigns(si_title).inspect
end
end
出力: nil
.