2

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メソッドがコントローラ テストに自動的に含まれないことです。そのためgetpost、 などの標準的な 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 がこれをコントローラ テストとして適切に解析できるようにするために知っておくべき構文はありますか?

4

1 に答える 1

3

上記のコードには、記述ブロックにテストがあります。通常、Rspec では、テストを「it」ブロックに入れます。お気に入り:

describe Sevenpages:Public::PagesController do
  describe 'GET #show' do
    it 'should work' do
      get :show, use_route: :sevenpages
      {{ tests go here }}
    end
  end
end

これを試してみると、メソッドは適切に定義されますか?

于 2013-01-28T01:17:28.637 に答える