RSpec 2 использование assign для просмотра спецификаций

Мне кажется, что мне не хватает чего-то очень простого, но я тоже не могу этого понять.

При выполнении следующей спецификации:

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 и думал, что правильно слежу за текущими документами.


person Paul    schedule 11.08.2011    source источник


Ответы (3)


Этот старый, но ради Google:

assign создает только переменные экземпляра. Однако current_user - это вспомогательный метод (или локальная переменная). Предполагая, что вы не полностью полагаетесь на тестирование просмотра, вы можете использовать следующий блок before, чтобы заставить его работать:

before(:each) do
  view.stub(:current_user) { User.new }
end
person Carsten    schedule 27.07.2012

то, что сработало для меня (с аналогичной проблемой), было примерно таким:

@controller.stub(:current_user) { @user }

Я думаю, проблема в том, что текущий пользователь - это не присвоение (переменная экземпляра), а значение в session.

Надеюсь, это поможет

person eloyesp    schedule 17.08.2011

Ну, я так и не понял, как заставить authlogic работать с этим, поэтому я обезьяно исправил метод current_user в самих тестах, чтобы заставить его работать.

def current_user
   Factory(:user)
end

Сработало, хотя я бы все равно дал «ответ», если кто-то может помочь мне сделать правильный путь.

person Paul    schedule 14.08.2011