Тест интеграции Rails (внутренняя ошибка ответа) - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь написать интеграционный тест для простого маршрута создания и могу использовать некоторую помощь. Все работает просто отлично, включая перенаправление, но когда я проверяю, есть ли у сообщения верный ответ, он говорит, что получен ответ 500, а не 200. Вот код:

Интеграционный тест :

require 'test_helper'
class CreateEventTest < ActionDispatch::IntegrationTest
  fixtures :users
  test "can login and create an event" do
    get "/login"
    assert_response :success
    post "/login", params: {user_name: users(:one).user_name, password: 'secret'}
    follow_redirect!
    assert_equal 200, status
    assert_equal "/", path
    get "/events/new"
    assert_response :success
    post '/events', params: { event: { name: "Event Title", description: "Description", location: "Search Results
1600 Pennsylvania Ave NW, Washington, DC 20500", date_from: DateTime.now + 10, date_to: DateTime.now + 15, latitude: -35.000000, longitude: 100.000000}}
    assert_response :redirect
    follow_redirect!
    assert_response :created # Returns a 500 rather than a 201
  end
end

Контроллер событий:

  def create
    @event = Event.new(event_params)
    respond_to do | format |
      if @event.save
        if(params.require(:event).key?("tags"))
          tags = Tag.find(params.require(:event)['tags'])
        else
          tags = Tag.find_by(name: "Other") # Set default tag if none was selected
        end
        @event.tags << tags
        UserEventRelationship.create(event_id: @event.id, user_id: current_user.id, role_type_id: 0)
        format.html { redirect_to @event, notice: 'Event was successfully created.' }
        format.json { render json: @event, status: :created, location: @event }
      else
        format.html {render 'new'}
        format.json {render json: @event.errors, status: :unprocessable_entity }
      end
    end
  end
  def event_params
    params.require(:event).permit(:name, :date_from,
    :location, :date_to, :description, :picture, :tags, :latitude, :longitude)
  end

Вот ошибка, которую я получаю:

Failure:
CreateEventTest#test_can_login_and_create_an_event [/Users/user/Documents/GitHub/myapp/test/integration/create_event_test.rb:21]:
Expected response to be a <201: created>, but was a <500: Internal Server Error>.
Expected: 201
  Actual: 500

1 Ответ

0 голосов
/ 30 марта 2020

Ничего себе. Это заставило меня чувствовать себя так глупо. Мне нужно было добавить статус в формат. html в EventController. Вот обновленный контроллер:

  def create
    @event = Event.new(event_params)
    respond_to do | format |
      if @event.save
        if(params.require(:event).key?("tags"))
          tags = Tag.find(params.require(:event)['tags'])
        else
          tags = Tag.find_by(name: "Other") # Set default tag if none was selected
        end
        @event.tags << tags
        UserEventRelationship.create(event_id: @event.id, user_id: current_user.id, role_type_id: 0)
        format.html { redirect_to @event, status: :permanent_redirect, notice: 'Event was successfully created.' }
        format.json { render json: @event, status: :created, location: @event }
      else
        format.html {render 'new'}
        format.json {render json: @event.errors, status: :unprocessable_entity }
      end
    end
  end

Вот обновленный тест:

require 'test_helper'
require_relative '../helpers/sign_in_helper'

class CreateEventTest < ActionDispatch::IntegrationTest
  include SignInHelper
  fixtures :users

  test "can create an event" do
    sign_in_as(users(:one), 'secret')

    get "/events/new"
    assert_response :success
    assert_equal "/events/new", path
    post '/events', params: { event: { name: "Event Title", description: "Description", location: "Search Results
1600 Pennsylvania Ave NW, Washington, DC 20500", date_from: DateTime.now + 10, date_to: DateTime.now + 15, latitude: -35.000000, longitude: 100.000000}}
    assert_response :permanent_redirect
    follow_redirect!
    assert_equal event_path, path
  end
end

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