Я должен заблокировать ответ 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
Для 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)