Hi,
(This is my first post after months of appreciative lurking...)
I''m trying to spec the following conditional controller macro:
class ApplicationController < ActionController::Base
# turn off session management for robots
session :off, :if => lambda {|req| req.user_agent =~ /(Google|Slurp)/i }
# ...
end
My current attempt seems to be quite unsuccessful:
1) when I include the controller.should_receive(:session) statement, the
index action no longer seems to be actually called (ie a breakpoint placed
in the index method is not triggered)
2) I receive the following error:
Spec::Mocks::MockExpectationError in ''ApplicationController should turn
off
session management for requests made by robot user agent''
Mock ''FooController'' expected :session with (:off) but
received it with (no
args)
./spec/controllers/application_spec.rb:19:
Any suggestions?
Thanks much,
Matt
describe ApplicationController do
class FooController < ApplicationController
def index; render :text => "foo"; end
end
controller_name :foo
it "should turn off session management for requests made by robot user
agent" do
request.stub!(:user_agent).and_return("Google Robot")
controller.should_receive(:session).with(:off)
get :index
end
end
--
View this message in context:
http://www.nabble.com/Spec%27ing-controller-macros-tp16927457p16927457.html
Sent from the rspec-users mailing list archive at Nabble.com.
On Tue, Apr 29, 2008 at 9:48 AM, Matt McNeil <nabble.108 at xoxy.net> wrote:> describe ApplicationController do > class FooController < ApplicationController > def index; render :text => "foo"; end > end > controller_name :foo > > it "should turn off session management for requests made by robot user > agent" do > request.stub!(:user_agent).and_return("Google Robot") > controller.should_receive(:session).with(:off) > get :index > end > endHi Matt, The problem here is that it''s actually the controller class that''s receiving the ''session'' message, not a controller object. In this case, mocking the call isn''t going to do you much good. The :if block wouldn''t get evaluated, forcing you to just duplicate the method arguments. The good news is you can test the desired behavior with a more state-based approach: it "should turn the session off" do request.stub!(:user_agent).and_return("Google Robot") get :index controller.should_not be_session_enabled end Pat