Enter!バッチを起動しようと勢いよくキーを叩いたら、それはシフトキーだった。Railsにてモデルの機能を拡張する方法は、モジュールをインクルードするのが一般的です。インクルードするモジュールがActiveRecordに依存しない内容であれば、単体テストを書くことは難しくありません。ActiveRecordに依存している場合はちょっと面倒です。インクルードする側のモデルに対応するテーブルが必要になるからです。今回は、そんな血ヘドを吐くような困難に打ち勝つ方法をご紹介します。2.14.0サンプルモデル・モジュールまずは、インクルードする側のArticleモデルです。UpdatedCountableendタイトル(title)・コンテント(content)・更新回数(updated_count)を持つモデルです。UpdatedCountableモジュールをインクルードしています。UpdatedCountableモジュールです。updated_count属性がインクリメントされるという仕様になっています。トリガー的なモジュールというわけです。それでは、この機能をrspecにてテストしましょう。(本当はテストが先なんですが!)Articleモデルのspecさっそく、spec/models/article_spec.rbに次のようなテストを書いてみました。両手放しで喜んではいけません。このままでも悪くはないのですが、少なくとも以下の点において非常に気持ちが悪いです。今後Articleモデルのテストコードが増えたときに、余計なコードがあると可読性が落ちるといわけで、このテストをUpdatedCountableモジュール用に切り出してみましょう。UpdatedCountableのspecspec/models/concerns/updated_countable_spec.rbというファイルを作成し、そこにspecを書きます。ダミーのテーブルを生成/破棄していることです。このテーブルが無いとArクラスはActiveRecordとして動いてくれません。