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