RSpecでRailsコントローラをテストしようとするとエラーが発生します。それは二重のネストされたルートです。私は正しい構文を理解しようとしていますが、運がまだあまりありませんでした。エラーRSpec ActionController :: UrlGenerationError with Rails
私は取得していますエラーが 失敗/エラーです:取得:インデックス、私は同じテストを行った
ActionController::UrlGenerationError:
No route matches {:action=>"index", :category_id=>"220", :controller=>"reviews", :id=>"166"}
# ./spec/controllers/reviews_controller_spec.rb:11:in `block (3 levels) in <top (required)>'
{CATEGORY_ID:category.to_param、ID system.to_param}うまく動作するシステムコントローラ。ウェブページもうまく機能します。エラーはありません(テストではこのエラーだけです)。
require 'rails_helper'
RSpec.describe ReviewsController, type: :controller do
let (:category) { create(:category) }
let (:system) { create(:system) }
let (:reviews) { create_list(:review, 3, category: category, system: system) }
describe "GET index" do
it "assigs all reviews to an instance var called @reviews" do
get :index, {category_id: category.to_param, id: system.to_param}
expect(assigns(:reviews)).to eq reviews
end
it "assigns all the reviews to an var called @system" do
get :index, system_id: system.to_param
expect(assigns(:system)).to eq system
end
end
describe "system scope" do
before { create(:review) }
it "only assigns reviews index in the current system" do
get :index, {category_id: category.to_param, id: system.to_param}
expect(assigns(:reviews)).to eq reviews
end
end
end
これは、それはテストのコントローラーである:ここで
のようなRSpecのテストを見ては何ですclass ReviewsController < ApplicationController
def index
@system = System.find(params[:system_id])
@reviews = @system.reviews
respond_to do |format|
format.html
format.json { render json: { system: @system, reviews: @reviews } }
end
end
def show
@system = System.find(params[:system_id])
@review = @system.reviews
end
end
そして、これらはルートです:ここでは
Rails.application.routes.draw do
root "categories#index"
resources :categories do
resources :systems do
resources :reviews
end
end
end
されていますモデル:
カテゴリーモデル
class Category < ActiveRecord::Base
validates_presence_of :name
has_many :systems
end
システムモデル
class System < ActiveRecord::Base
belongs_to :category
has_many :reviews
validates_presence_of :name, :category
end
レビューモデル
class Review < ActiveRecord::Base
belongs_to :system
validates_presence_of :content, :system
end
あなたのルートはどこですか? – Pavan
間違いをしました。あなたがルートを見ることができるように私は編集しました。 – Samuel