シナリオという懸念事項
を抽出しましたTaggable
。これは、どのモデルでもタグ付けをサポートできるようにするモジュールです。User
この懸念/モジュールを、Location
、Places
、 のようなモデルに含めましProjects
た。
このモジュールのテストを書きたいのですが、どこから始めればよいかわかりません。
質問
1. 問題に対して分離テストを行うことはできますTaggable
か?
以下の例では、テストが を探しているため、テストは失敗しますdummy_class table
。has_many
コードが原因でこれを行っていると想定しているためTaggable
、結果として'DummyClass'
ActiveRecord オブジェクトであると予想されます。
# /app/models/concerns/taggable.rb
module Taggable
extend ActiveSupport::Concern
included do
has_many :taggings, :as => :taggable, :dependent=> :destroy
has_many :tags, :through => :taggings
end
def tag(name)
name.strip!
tag = Tag.find_or_create_by_name(name)
self.taggings.find_or_create_by_tag_id(tag.id)
end
end
# /test/models/concerns/taggable_test.rb
require 'test_helpers'
class DummyClass
end
describe Taggable do
before do
@dummy = DummyClass.new
@dummy.extend(Taggable)
end
it "gets all tags" do
@dummy.tag("dummy tag")
@dummy.tags.must_be_instance_of Array
end
end
私の一部は、このモジュールが内部に含まれているモデルをテストするUser
だけで十分なテストだと思います。しかし、モジュールを分離してテストする必要があることを読み続けています。
正しいアプローチとは何かについてのガイダンス/戦略を探しています。