无法使用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