RSpec 2使用assign作为视图规范

时间:2011-08-11 05:18:05

标签: rspec2

我觉得我错过了一些非常基本的东西,但我似乎无法弄明白。

执行以下规范时:

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,并认为我正在按照当前的文档进行操作。

3 个答案:

答案 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

虽然有人可以帮助我以正确的方式帮助我,但我仍然会给予“答案”。