Тест RSpec для перенаправления возвращает 200 - PullRequest
5 голосов
/ 13 сентября 2011

Я пытаюсь протестировать этот метод, который перенаправляет на ту же страницу, но с www.префикс, если его там нет.Он выполняет перенаправление, но тест RSpec возвращает «Ожидаемый ответ будет <: redirect>, но был <200>».Почему это так?

application_controller.rb

  def check_uri
    if request.subdomain.present? and request.subdomain.first != "www"
      redirect_to request.protocol + "www." + request.host_with_port + request.fullpath if !/^www/.match(request.host)
    end
  end

application_controller_spec.rb #

  describe :check_uri do
    it "should redirect to www" do
      { :get => "http://sub.lvh.me:3000/accounts/sign_up" }.
        should redirect_to "http://www.sub.lvh.me:3000/accounts/sign_up"
    end
  end

При отладке я получаю: (

rdb:1) p response
#<ActionController::TestResponse:0x0000010277d988 @writer=#<Proc:0x0000010277c678@/Users/mm/.rvm/gems/ruby-1.9.2-p0@evergreen/gems/actionpack-3.0.7/lib/action_dispatch/http/response.rb:43 (lambda)>, @block=nil, @length=0, @header={}, @status=200, @body=[], @cookie=[], @sending_file=false, @blank=false, @cache_control={}, @etag=nil>

Ответы [ 2 ]

0 голосов
/ 28 ноября 2014

Ваш тест не соответствует методу check_uri, который вы определили в application_controller.rb, потому что RSpec работает с тестовым хостом по умолчанию, например, "test.host" на порту 80.

Вы должны вызвать действие, которое присутствует в вашем контроллере приложения, и заблокировать хост и порт запроса следующим образом:

describe :check_uri do
  it "should redirect to www" do
    @request.host = 'sub.lvh.me'
    @request.port = 3000

    get :index

    expect(response).to redirect_to "http://www.sub.lvh.me:3000/accounts/sign_up"
  end
end
0 голосов
/ 17 мая 2012

Не могли бы вы проверить расположение заголовка ответа?

 response.header["Location"].should eq("http://www.sub.lvh.me:3000/accounts/sign_up"

)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...