Вот несколько примеров базовой формы.
controller.stub(:action_name).and_raise([some error])
controller.stub(:action_name).and_return([some value])
В вашем конкретном случае я считаю, что правильная форма будет такой:
controller.stub(:current_user).and_return([your user object/id])
Вот полный рабочий примериз проекта, над которым я работаю:
describe PortalsController do
it "if an ActionController::InvalidAuthenticityToken is raised the user should be redirected to login" do
controller.stub(:index).and_raise(ActionController::InvalidAuthenticityToken)
get :index
flash[:notice].should eql("Your session has expired.")
response.should redirect_to(portals_path)
end
end
Чтобы объяснить мой полный пример, в основном, что он делает, это проверяет, что, когда в приложении возникает ошибка ActionController::InvalidAuthenticityToken
, появляется флэш-сообщениепользователь перенаправлен на действие portals_controller#index
.Вы можете использовать эти формы, чтобы заглушить и вернуть определенные значения, проверить экземпляр данной ошибки и т. Д. Вам доступно несколько .stub(:action_name).and_[do_something_interesting]()
методов.
Обновление (после того, как вы добавили свой код): в соответствии с моим комментарием измените код так, чтобы он читался следующим образом:
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