【Rails 5】ヘルパーを使用しているactive_decoratorをrspecでテストする


active_decoratorにてデコレートされたモデルをrspecでテストする際、デコレータ内でヘルパーメソッド( link_to とか url_for とか)を使用しているとNoMethodErrorが発生する。これは ActiveDecorator::ViewContext に ActionView::Context が積まれてないことが原因みたい。rspec専用のgem(mizoR/active_decorator-rspec)もあるみたいだけど、まだrails 5には対応できてない注1)active_decorator-rspec 0.0.9で対応したようです。(もしくはrspec 3.5?)ようなので、対応策をメモっておく。

環境

  • rails 5.0.0.rc1
  • rspec 3.5.0.beta3
  • active_decorator 0.7.1

対応方法

まずはrspecようのヘルパーモジュールを書く。私の場合はsupportディレクトリ内に置いて読みこむようにしてるので、 spec/support/decorator_spec_helper.rb に書く。

テスト用のコントローラとリクエストを生成して、そこからViewContextをガメるという作戦。

続いて rails_helper.rb に以下のコードを追加する。

あとはテストしたいデコレーターに type: :decorator を忘れずに付けるだけ。

以上。

関連する記事


注釈   [ + ]

1. active_decorator-rspec 0.0.9で対応したようです。

【Rails 5】ヘルパーを使用しているactive_decoratorをrspecでテストする”に関する2件のコメント

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください