Как я могу проверить, что 301 перенаправление происходит с rspec? - PullRequest
1 голос
/ 18 октября 2010

Мне нужно проверить две вещи:

  1. что некоторые старые пути правильно перенаправлены на определенные новые пути
  2. что редирект 301, а не 302.

Я использую Капибару для приемочных испытаний, но это не справится с №2. Я могу проверить, что перенаправление происходит, но происходит тихо, поэтому я не вижу, что это был 301.

Тесты контроллера не могут обработать # 1. Глаголы «get», «post» и т. Д., Которые rspec предоставляет для тестов контроллера, позволяют передавать только действие, а не конкретный путь, а перенаправление осуществляется в виде одного действия на основе пути, как показано ниже:

# controller
class ExampleController
  def redirect301
    redirect_to case request.path
    when '/old_a'
      '/new_a'
    when '/old_b'
      '/new_b'
    end, :status => 301
  end
end

# routes.rb
['old_a', 'old_b'].each do |p| 
  map.connect p, :controller => :example, :action => :redirect301
end

Итак, что мне делать?

Ответы [ 3 ]

4 голосов
/ 18 октября 2010

Попробуйте это:

it "should redirect with 301" do
  get :action
  response.code.should == 301
end
1 голос
/ 20 августа 2014

Чтобы проверить статус ответа, сделайте это - expect(response.status).to eq(301) И чтобы проверить URL ответа, сделайте это - expect(response.location).to eq(my_path)

Так что в целом это должно выглядеть так:

it "should redirect with a 301 status code to my_path" do
  get :action
  expect(response.status).to eq(301)
  expect(response.location).to eq(my_path)
end
0 голосов
/ 07 декабря 2015

Используя rspec-rails 2.12.0 и современный синтаксис expect, это правильный формат:

  it "should redirect with a 301 status code to /whatever_path" do
    get :some_action
    expect(response).to redirect_to '/whatever_path' # or a path helper
    expect(response.code).to eq '301'
  end

Обратите внимание на строку 301 - когда я запускал эту спецификацию сцелое число, оно не удалось, сравнивая 301 с "301", которые в Ruby не равны.

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