我觉得我错过了一些非常基本的东西,但我似乎无法弄明白。
执行以下规范时:
require 'spec_helper'
describe "/mymodel/show.html.erb" do
before(:each) do
@mymodel = Factory(:mymodel)
@user = Factory(:user)
assign(:web_tip, @mymodel)
assign(:current_user, @user)
end
it "renders attributes in <p>" do
render
rendered.should have_text(/somevalue/)
end
end
我收到一个错误,即局部变量current_user未定义(视图的布局要调用它来显示当前的登录状态)。
我正在使用Rails 3,Rspec 2.6.4,并认为我正在按照当前的文档进行操作。
答案 0 :(得分:7)
这个是旧的,但是为了谷歌:
assign
仅创建实例变量。但是,current_user
是辅助方法(或局部变量)。假设您不完全依赖于视图测试,可以使用以下before
块来使其工作:
before(:each) do
view.stub(:current_user) { User.new }
end
答案 1 :(得分:1)
对我有用的(有类似的问题)是这样的:
@controller.stub(:current_user) { @user }
我认为问题是当前用户不是分配(实例变量),是session
中的值。
希望有所帮助
答案 2 :(得分:0)
好吧,我从来没有想过如何让authlogic使用它,所以我在测试本身上monkeypatched current_user方法让它工作。
def current_user
Factory(:user)
end
虽然有人可以帮助我以正确的方式帮助我,但我仍然会给予“答案”。