Hi all, I''m just starting to work w/ RSpec, so I hope this question isn''t too obvious or missing the point somehow: Is there a way in RSpec to specify that a controller action should use a specific HTTP status code? Specifically I want to test for the usage of 301 as opposed to 302, for a permanent redirection. response.should be_redirect looks like it calls ActionController::TestRequest#redirect?, which is only testing for a status code from 300..399. In an old-fashioned Test::Unit Rails test I could do assert_response, but I can''t see anything matching that in RSpec. Is there a less-documented feature I''m missing? Thanks, Francis Hwang http://fhwang.net/
On Dec 1, 2007, at 3:45 PM, Francis Hwang wrote:> Hi all, > > I''m just starting to work w/ RSpec, so I hope this question isn''t too > obvious or missing the point somehow: Is there a way in RSpec to > specify that a controller action should use a specific HTTP status > code? Specifically I want to test for the usage of 301 as opposed to > 302, for a permanent redirection. > > response.should be_redirect > > looks like it calls ActionController::TestRequest#redirect?, which is > only testing for a status code from 300..399. In an old-fashioned > Test::Unit Rails test I could do assert_response, but I can''t see > anything matching that in RSpec. Is there a less-documented feature > I''m missing? > > Thanks, > > Francis Hwang > http://fhwang.net/ >Hey Francis - Great to see you''ve finally come over from the dark side (Test::Unit)! How is rspec treating you? Anyway - here''s how I''ve done it with a 404: describe ErrorController, "view" do it "should render the 404 page in public/" do get :view response.should render_template("#{RAILS_ROOT}/public/404.html") end it "should return an HTTP status code of 404" do get :view response.headers["Status"].should == "404 Not Found" end end I would imagine you could do something similar for 301. I don''t think there are currently any matchers for these status codes like: should_be_not_found or should_not_be_a_404, although they could certainly be written. (Method missing seems to be screaming at me here...) Regards, Scott Taylor
On Dec 1, 2007 4:27 PM, Scott Taylor <mailing_lists at railsnewbie.com> wrote:> > On Dec 1, 2007, at 3:45 PM, Francis Hwang wrote: > > > Hi all, > > > > I''m just starting to work w/ RSpec, so I hope this question isn''t too > > obvious or missing the point somehow: Is there a way in RSpec to > > specify that a controller action should use a specific HTTP status > > code? Specifically I want to test for the usage of 301 as opposed to > > 302, for a permanent redirection. > > > > response.should be_redirect > > > > looks like it calls ActionController::TestRequest#redirect?, which is > > only testing for a status code from 300..399. In an old-fashioned > > Test::Unit Rails test I could do assert_response, but I can''t see > > anything matching that in RSpec. Is there a less-documented feature > > I''m missing? > > > > Thanks, > > > > Francis Hwang > > http://fhwang.net/ > > > > Hey Francis - Great to see you''ve finally come over from the dark > side (Test::Unit)! How is rspec treating you? > > Anyway - here''s how I''ve done it with a 404: > > describe ErrorController, "view" do > > it "should render the 404 page in public/" do > get :view > response.should render_template("#{RAILS_ROOT}/public/404.html") > end > > it "should return an HTTP status code of 404" do > get :view > response.headers["Status"].should == "404 Not Found" > end > > endYou can also just go right for the response_code: response.response_code.should == 301> > > I would imagine you could do something similar for 301. I don''t > think there are currently any matchers for these status codes like: > should_be_not_found or should_not_be_a_404, although they could > certainly be written. (Method missing seems to be screaming at me > here...) > > Regards, > > Scott Taylor > > > > > > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >
On 1.12.2007, at 23.27, Scott Taylor wrote:> it "should return an HTTP status code of 404" do > get :view > response.headers["Status"].should == "404 Not Found"or response.response_code.should == 404 -- Jarkko Laine http://jlaine.net http://dotherightthing.com http://www.railsecommerce.com http://odesign.fi
On Dec 1, 2007, at 5:10 PM, Jarkko Laine wrote:> On 1.12.2007, at 23.27, Scott Taylor wrote: >> it "should return an HTTP status code of 404" do >> get :view >> response.headers["Status"].should == "404 Not Found" > > or > > response.response_code.should == 404 >Nice. I find out something new every day from this list.
On Dec 1, 2007 5:19 PM, Scott Taylor <mailing_lists at railsnewbie.com> wrote:> > On Dec 1, 2007, at 5:10 PM, Jarkko Laine wrote: > > > On 1.12.2007, at 23.27, Scott Taylor wrote: > >> it "should return an HTTP status code of 404" do > >> get :view > >> response.headers["Status"].should == "404 Not Found" > > > > or > > > > response.response_code.should == 404 > > > > Nice. I find out something new every day from this list.You might also look at status_codes.rb. For example, if you have rails in vendor/rails, it''s path is vendor/rails/actionpack/lib/action_controller/status_codes.rb For any status in that file, you should be able to do this in your examples: assert_response :not_found Yes, that''s a Test::Unit assertion. Here''s why I use it: * I''m not sure if there is a way to do it in RSpec (haven''t yet investigated) * I can use Test::Unit assertions in RSpec (really cool) * I like the way it reads compared to using the codes, such as 404 Regards, Craig -------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/rspec-users/attachments/20071202/bd0a0834/attachment.html