15

シナリオという懸念事項 を抽出しましたTaggable。これは、どのモデルでもタグ付けをサポートできるようにするモジュールです。Userこの懸念/モジュールを、LocationPlaces、 のようなモデルに含めましProjectsた。

このモジュールのテストを書きたいのですが、どこから始めればよいかわかりません。

質問
1. 問題に対して分離テストを行うことはできますTaggableか?
以下の例では、テストが を探しているため、テストは失敗しますdummy_class tablehas_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だけで十分なテストだと思います。しかし、モジュールを分離してテストする必要があることを読み続けています。

正しいアプローチとは何かについてのガイダンス/戦略を探しています。

4

4 に答える 4

0

@StuartM's answerで示唆されているように、 temping gemを使用するとうまくいきました。

# test.rb/spec.rb
Temping.create :dummy_class do
  include Taggable
end

describe Taggable do
  before do
    @dummy = DummyClass.new
  end
  ...
end
于 2014-07-24T14:59:50.803 に答える