СЦЕНАРИЙ
Я выделил проблему 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
, что достаточно для теста. Но я продолжаю читать, что вы должны тестировать модули изолированно.
Ищете какое-то руководство/стратегию относительно правильного подхода.