app/controllers/sevenpages/public/pages_controller.rbに次のようにネストされた名前のRailsコントローラーがあります。PagesController
module Sevenpages
module Public
class PagesController < ApplicationController
layout nil
def show
end
end
end
end
RSpecを使用してこのコントローラーをテストしたい
spec/controllers/sevenpages/pubic/pages_controller_spec.rbで次のテストを作成すると:
require 'spec_helper'
describe Sevenpages:Public::PagesController do
describe 'GET #show' do
get :show, use_route: :sevenpages
{{ tests go here }}
end
end
次のエラーが表示されます。
undefined method `get' for #<Class:0x007fe5c88e4300> (NoMethodError)
これで、このエラー メッセージの意味がわかりました。問題は、RSpec::Rails::ControllerExampleGroup
メソッドがコントローラ テストに自動的に含まれないことです。そのためget
、post
、 などの標準的な Rails メソッドはテストで使用できません。
運が悪くても見つけられるすべての推奨ソリューションを試しました。これが私が試したことです:
含まれていることを確認し
spec/spec_helper.rb
ますrequire 'rspec/rails'
以下を使用して、テスト タイプを明示的に宣言します。
describe Sevenpages::Public::PagesController, type: :controller do
以下を使用して、コントローラーのサンプル グループを明示的に含めます。
include RSpec::Rails::ControllerExampleGroup
コントローラー本体に
他に何を試すことができるか途方に暮れています。私が使用していることに注意する必要があります:
- レール 3.2.11
- RSpec 2.12.2
私のアプリは Rails engineであるため、メソッドuse_route
へのパラメーターです。get
私が考えることができる唯一のことは、RSpec がこれほど深くネストされたコントローラーを処理する方法を知らないということです。RSpec がこれをコントローラ テストとして適切に解析できるようにするために知っておくべき構文はありますか?