カテゴリー:
Rails
タグ:
 Rspec module AnonymousController Rails

このエントリーをはてなブックマークに追加
更新日時:
2013年08月15日(木)
作成日時:
2013年08月14日(水)

前の記事 / 次の記事

参考

例えば次のようなモジュールがあった時、

module SetYoubiAble
  def self.included(base)
    base.class_eval {
      before_action :set_youbi
    }

    private
      def self.youbis
        %w(月 火 水 木 金 土 日)
      end

      def set_wday
       @youbi = self.class.youbis[DateTime.now.cwday - 1]
      end

  end
end

AnonymousControllerを使うと次のようなRspecを書ける

describe SetYoubiAble do
  controller do 
    include SetYoubiAble
    def index
      render text: "success!"
    end
  end

  it "@youbiに漢字の曜日がセットされる" do
    expect(controller).to receive :set_cwday
    get :index
  end
end

AnonymousControllerを使わなくてもメソッドのテストはできるけど、
アクションを実行させた結果が欲しい時はAnonymousControllerを使うと便利。

備考というか整理

controller do
end

とした時、このcoltrollerはどこに住んでいるのかというと、AnonymousControllerのオブジェクトに住んでいる。
つまり、この記述はAnonymousControllerのインスタンスを定義している。

だから、

controller.class.name
#=> AnonymousController

であり、このcontroller自体はClassクラスのインスタンス(インスタンスを生成できるクラス)ではない。
例えば、

class BooksController < ApplicationController
end

みたいなクラスがあった時に、

controller do
end

で定義しているのは、BooksControllerにあたるものではなく、BooksControllerのインスタンスである。