I’m testing methods in my ApplicationController using anonymous
controller
class (not sure if that’s relevant). I’ve somehow broken something such
that I do not have access to the routing variables that rails generates.
So rather than having something like ‘response.should redirect_to
new_user_session_path’ I’m having to go with 'response.should
redirect_to
‘/users/sign_in’
I’ve created a new project to check if I messed anything in spec_helper
or
something else, and I’ve been unable to reproduce outside of my current
project. I can access the route variables from other controller spec
classes, but not from the application_controller_spec.
Can anyone point me at where to look to start troubleshooting this?
Rails 3.0.5
$ gem list | grep rspec
rspec (2.5.0)
rspec-core (2.5.2)
rspec-expectations (2.5.0)
rspec-mocks (2.5.0)
rspec-rails (2.5.0)
Code snippets
/app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
protect_from_forgery
def require_bar
if
!user_signed_in?
redirect_to new_user_session_path
return
end
check for bar here
end
end
/spec/controllers/application_controller_spec.rb
require ‘spec_helper’
describe ApplicationController do
describe “#require_bar” do
controller do
before_filter :require_bar
def index
render :text => “”, :status => 200
end
end
context "when not signed in" do
before :each do
controller.stub(:user_signed_in?).and_return(false)
end
it "should fail gracefully by redirecting to log in" do
get :index
# This works
response.should redirect_to '/users/sign_in'
# this causes: undefined local variable or method
`new_merchant_session_path’ for
#RSpec::Core::ExampleGroup::Nested_1::Nested_2::Nested_1:0x000001034cd160
# response.should redirect_to new_user_session_path
end
end
end