Как отрицательный assert_response в модульном тестировании с Rails

#ruby-on-rails #unit-testing #httpresponse

#ruby-on-rails #модульное тестирование #httpresponse

Вопрос:

Как можно проверить, не является ли HTTP-ответ чем-то иным в стандартной среде модульного тестирования с Rails (версия 6.0, более конкретно)? По сути, это отрицание assert_response следующим образом:

 test "should get index" do
  get restricted_articles_url
  assert_response_NOT :success  # <= this method does not exist.
end
  

Предыстория в том, что тестируемому пользователю не должен быть предоставлен доступ к URL (или методу контроллера), но какой ответ будет возвращен, может измениться позже в процессе разработки, и точный ответ имеет второстепенное значение.

Ответ №1:

Ref rails-specific-assertions , почему бы вам не использовать точный ответ, который вы ожидаете, вместо использования отрицания assert_response .

 Asserts that the response comes with a specific status code. You can specify 
:success to indicate 200-299, :redirect to indicate 300-399, :missing to 
indicate 404, or :error to match the 500-599 range
  

Например:-

  assert_response :redirect
  

Ответ №2:

Вы всегда можете проверить response.code напрямую с помощью

 # codes from 200 to 299 are :success
assert_not (200...299).include?(response.code.to_i)