One more thing about using Sorcery in a Rails project. I did mention that to make unit tests work, I had to stub out "current_user" in every single controller:
Given /^I'm a doctor$/ do
@user = User.create!(:email => "testuser@example.com", :password => "password")
DoctorsController.any_instance.stub(:current_user).and_return(@user)
VisitsController.any_instance.stub(:current_user).and_return(@user)
PatientsController.any_instance.stub(:current_user).and_return(@user)
end
Even in Cucumber scenarios that do not use one of these steps that stub out current_user, I found that I had to explicitly unstub the method. I did not investigate why this is the case; I'm guessing that Cucumber would have to reload the whole environment between running each scenario, which would take too long. Perhaps there's a better way for Sorcery to provide "current user" functionality without patching each controller, or perhaps there's a better way for me to test mocking logged in users. In any case, this works, explicitly adding a step to make sure that the mocked-up logged-in user is no longer stubbed in:
Given /^I am not logged in$/ do
begin
VisitsController.any_instance.unstub(:current_user)
rescue RSpec::Mocks::MockExpectationError
end
begin
DoctorsController.any_instance.unstub(:current_user)
rescue RSpec::Mocks::MockExpectationError
end
// etc...
end
No comments:
Post a Comment