Тест несостоявшихся рельсов - ActionController :: UnknownFormat: - PullRequest
0 голосов
/ 18 октября 2018

Я сейчас пишу тесты для всех своих контроллеров и столкнулся с проблемой, которую не могу решить.Для одного из моих контроллеров, каждый тест работает (показать, индексировать, новый, редактировать, обновить), но по какой-то причине мой тест #create не может пройти.Просто чтобы уточнить: все приборы и другие методы работают и проходят нормально - что-то не так с моим методом create или тестом этого метода.

Из того, что я могу понять - ошибка может быть как-то связана со строкой respond_to |format|, но не может ее решить.

Вся помощь очень ценится - спасибо!

Вот тест

  test "should create captable" do
    sign_in @user
    post company_captables_url(@company, @captable), params: { captable: { company_id: @captable.company_id, name: "The BEST captable", version: @captable.version } }
    assert_response :success
  end

Вот метод с контроллера

  def create
      @captable = @company.captables.new(captable_params)

      respond_to do |format|
        if @captable.save
          format.html { redirect_to [@company, @captable], notice: 'Captable was successfully created.' }
          format.json { render :show, status: :created, location: @captable }
        else
          format.html { render :new }
          format.json { render json: @captable.errors, status: :unprocessable_entity }
        end
      end
    end

Ошибка привыполнение этого теста

Error:
CaptablesControllerTest#test_should_create_captable:
ActionController::UnknownFormat: ActionController::UnknownFormat
    app/controllers/captables_controller.rb:24:in `create'
    test/controllers/captables_controller_test.rb:38:in `block in <class:CaptablesControllerTest>'


bin/rails test test/controllers/captables_controller_test.rb:36

1 Ответ

0 голосов
/ 19 октября 2018

На вашем контроллере видно, что он отвечает как на html, так и на json.

Однако в вашем тестовом запросе он попадает на URL без какого-либо формата (см. https://guides.rubyonrails.org/routing.html#path-and-url-helpers, нет .anything в сгенерированных URL-адресах или вы найдете окончание .:format).Таким образом, контроллер не знает, что ответить_, выдавая ошибку неизвестного формата.

У вас есть несколько вариантов:

1) Вы можете написать URL и добавить явный формат

2) Вы можете попытаться добавить туда формат с конкатенацией (т. Е. post "#{company_captables_url(@company, @captable)}.json")

3) Вы можете задать для своих маршрутов формат ответа по умолчанию (т. Е. resources :captables, defaults: { format: 'json' }).https://guides.rubyonrails.org/routing.html#defining-defaults

...