场景
我提取了一个名为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足够了。但我一直在读到你应该单独测试模块。
寻找一些关于正确方法的指导/策略。