無法使用RSpec從控制器測試變量值。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
當我運行測試,我得到的各種誤差對assigns(:toy).user.should
表明toy
是零。我試過用很多方法搞亂assigns
語法,因爲我找不到它的文檔。
我在做什麼錯?什麼是正確的方式來看看控制器用戶和玩具傳遞給它?
編輯:嘗試逐步過渡到實例變量,但它仍然沒有辦法。這裏又是我的代碼用實例變量(VAR不同的名字,相同的結果):
思路控制器:
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
。
試過了,但它不工作...請參閱重構上面的代碼(編輯我的問題) – ezuk