ActiveRecordモデルにincludeしたりするModuleの結合テスト
テストのモデルを作って使う方法メモ。
参考にしたコード
CarrierWave::ActiveRecordのテスト
require 'rails_helper' # インタフェース的に使うFeatureモジュールのテスト例 # テスト用のActiveRecordモデル class FeatureTestObject < ActiveRecord::Base include Feature end $arclass = 0 # とそのマイグレーションを用意して class FeatureTestMigration < ActiveRecord::Migration def self.up create_table 'feature_test_objects', :force => true do |t| end end def self.down drop_table 'feature_test_objects' end end describe Feature do # migrate/rollbackの実行 before(:all) { FeatureTestMigration.up } after(:all) { FeatureTestMigration.down } # after_rollbackコールバックやafter_commitコールバックでエラーを発生する場合にrescueしない before :all do ActiveRecord::Base.raise_in_transactional_callbacks = true end # テスト毎に新しいクラスオブジェクトを使うようにする # クラスのインスタンス変数をテストごとに共有してしまわないようにする? before do $arclass += 1 @class = Class.new(FeatureTestObject) Object.const_set("FeatureTestObject#{$arclass}", @class) @class.table_name = 'feature_test_objects' end # テスト本体 describe ".hoge=(fuga)" do before do @class.hoge = 'fuga' end it do expect(@class.new.hoge).to eq('fuga') end end end