开发者

How should I test request-related logic in Rails development?

开发者 https://www.devze.com 2022-12-13 17:09 出处:网络
I have several before_filters defined in my application controller to handle requests I don\'t like. One representative example is:

I have several before_filters defined in my application controller to handle requests I don't like. One representative example is:

before_filter :reject_www

private

def reject_www
  if request.subdomains.include? 'www'
    redirect_t开发者_开发技巧o 'http://example.com' + request.path, :status => 301
    false
  end
end

(Returning false skips any following before_filters and simply returns the redirection immediately)

So, two questions:

One, how should I test this functionality? The only testing framework I've used so far is Cucumber + Webrat, which isn't really set up to handle this kind of thing. Is there another framework I should also use to fake requests like this?

Two, is there any way I can try out this functionality myself in my development environment? Since I'm simply browsing the site at localhost:3000, I can't ensure that the above code works in my browser - I'd have to push it to production, hope it works and hope it doesn't mess up anything for anyone in the meantime, which makes me nervous. Is there an alternative?


In a functional test, you can explicitly set the request host. I'm not sure what testing framework you prefer, so here is an example in good ole' Test::Unit.

def test_should_redirect_to_non_www
  @request.host = 'www.mydomain.com'
  get :index
  assert_redirected_to 'http://mydomain.com/'
end


To address #2
You can add entries in your hosts file so that www.mydomain.com points to your local host and then test the logic in your development environment . You can try hosting it using passenger so that it works on apache . Hope that helps .

0

精彩评论

暂无评论...
验证码 换一张
取 消