Как заблокировать метод ApplicationController в спецификации запроса

Я должен заблокировать ответ a current_user метод в Rspec/capybara запрашивает спецификацию. Метод определяется в ApplicationController и использует helper_method. Метод должен просто возвратить идентификатор пользователя. В тесте я хотел бы, чтобы этот метод возвратил тот же идентификатор пользователя каждый раз.

С другой стороны, я мог решить свою проблему путем установки session[:user_id] в спецификации (который является что current_user возвраты)..., но это, кажется, не работает также.

Действительно ли любой из них возможен?

Править:

Вот то, что я имею (это не работает. Это просто выполняет нормальный current_user метод).

require 'spec_helper'

describe "Login" do

   before(:each) do
     ApplicationController.stub(:current_user).and_return(User.first)
   end

  it "logs in" do
    visit '/'
    page.should have_content("Hey there user!")
  end

end

Также не работа:

require 'spec_helper'

describe "Login" do

  before(:each) do
    @mock_controller = mock("ApplicationController") 
    @mock_controller.stub(:current_user).and_return(User.first)
  end

  it "logs in" do
    visit '/'
    page.should have_content("Hey there user!")
  end

end
62
задан 28 May 2014 в 07:51

1 ответ

Для Rspec 3 + новый API:

Для теста контроллера, хорошего и короткого:

allow(controller).to receive(:current_user).and_return(@user)

Или для всех экземпляров ApplicationController:

allow_any_instance_of(ApplicationController).to receive(:current_user).and_return(@user)
2
ответ дан 31 October 2019 в 14:20

Другие вопросы по тегам:

Похожие вопросы: