Возникли проблемы с вложенным контроллером spe c с рельсами RSpe c 5 - PullRequest
0 голосов
/ 22 января 2020

Учитывая этот надуманный пример:

RSpec.describe City::Road::HouseController, type: :controller do
  let(:house) { create :house }

  describe 'index' do    
    context 'a request is received without a valid basic-auth header' do
      it 'renders unauthorized' do
        before { method_that_unsets_basic_auth_header }
        get(:index, params: { house_id: house.id })

        expect(response).to have_http_status(:unauthorized)
      end
    end
  end
end

со следующими маршрутами:

namespace :city do
  namespace :road do
    resources :location, only: %i[show index] do
      resources :house, only: %i[index], on: :member
    end
  end
end

Почему я продолжаю получать эту ошибку?:

 ActionController::UrlGenerationError:
       No route matches {:action=>"index", :controller=>"city/road/house :house_id=>1}

I думаю, это потому, что он игнорирует location.

Я ожидаю, что маршрут будет:

/city/road/location/:location_id/house

Я смотрел на следующие вопросы / ответы, но ни один из они помогли (хотя я признаю, что, возможно, что-то упустил):

  1. Как тестировать контроллеры с вложенными маршрутами, используя rspe c
  2. Rails Rspe c тестирование контроллера с вложенными ресурсами
  3. RSpe c контроллер для вложенных ресурсов, before_action

1 Ответ

0 голосов
/ 23 января 2020

Я еще раз посмотрел на другие вопросы / ответы, которые я связал, и заметил, что все они имели одно отличие от того, что было у меня.

Я удалил опцию :member

namespace :city do
  namespace :road do
    resources :location, only: %i[show index] do
      resources :house, only: %i[index]
    end
  end
end

и spe c теперь имеет зеленый цвет, я не знаю, почему это повлияет на spe c, потому что маршрут выглядит одинаково с или без этой опции.

...