ActionController :: UrlGenerationError: Маршрут не соответствует и отсутствует идентификатор, хотя я передаю идентификатор в тест - PullRequest
0 голосов
/ 17 октября 2018

Я все еще новичок в rails и пытаюсь написать некоторые базовые тесты для одного из моих контроллеров.

Ради краткости этого вопроса давайте рассмотрим два моих теста.

  • should show captable не удалось
  • should get index asserts успешно

Из приведенной ниже ошибки я вижу проблему missing required keys: [:id], но я прохожуидентификатор - так что я не могу понять, в чем проблема.

Благодарность за любую помощь:)

Файл теста (включены только соответствующие тесты по этому вопросу)

require 'test_helper'

class CaptablesControllerTest < ActionDispatch::IntegrationTest
  include Devise::Test::IntegrationHelpers

  setup do
    @captable = captables(:one)
  end

  setup do
    @company = companies(:one) 
  end

  setup do 
    @user = users(:one) 
  end

  test "should show captable" do
    sign_in @user
    get company_captable_url(@captable), id: @captable.id
    assert_response :success
  end

  test "should get index" do
    sign_in @user
    get company_captables_url(@company)
    assert_response :success
  end
....

Theконтроллер (только что включены соответствующие методы)

class CaptablesController < ApplicationController
  before_action :set_company
  before_action :set_captable, only: [:show, :edit, :update, :destroy]

  def index
    @captables = @company.captables
  end

  def show
    @captable = Captable.find(params[:id])
  end
.....

Крепление таблиц крышки

one:
  id: 1
  version: 1
  name: MyText
  company_id: 1

Это ошибка при попытке запускатест

Error:
    CaptablesControllerTest#test_should_show_captable:
    ActionController::UrlGenerationError: No route matches {:action=>"show", :company_id=>#<Captable id: 1, version: 1, name: "MyText", company_id: 1, created_at: "2018-10-17 18:34:14", updated_at: "2018-10-17 18:34:14", total_stocks_in_company: nil>, :controller=>"captables"}, missing required keys: [:id]
        test/controllers/captables_controller_test.rb:41:in `block in <class:CaptablesControllerTest>'


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

1 Ответ

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

ActionController :: UrlGenerationError: Маршрут не найден-10-17 18:34:14 ", updated_at:" 2018-10-17 18:34:14 ", total_stocks_in_company: nil,: controller =>" captables "}, отсутствуют необходимые ключи: [: id]

Ваш помощник пути company_captable_url, который, как я считаю, создан из вложенных ресурсов .Поэтому он ожидает значения для двух динамических сегментов, т. Е. :company_id и :id.Таким образом, @company должен быть передан вместе с @captable.Вы должны изменить это ниже

test "should show captable" do
  sign_in @user
  get company_captable_url(@company, @captable)
  assert_response :success
end
...