Всем привет.
RSpec 3.8
Rails 5.2.1
Есть модуль:
module X
included do
after_create :test_method
end
def test_method
...
end
end
и есть модель, которая этот метод использует:
class ParentModel < ApplicationRecord
include X
end
также есть еще модель, которая является дочерней для ParentModel
class ChildModel < ApplicationRecord
belongs_to :parent_model
end
В тестах модель ChildModel создается с помощью FactoryBot, что автоматически вызывает создание экземпляра модели родителя и вызов метода из модуля X.
Цель - заставить метод test_method вернуть то, что нужно.
Как это сделано сейчас:
parent_model = ParentModel.new
allow(ParentModel).to receive(:new).and_return(parent_model)
allow(parent_model).to receive(:test_method).and_return(true)
child_model = FactoryBot.create(:child_model)
все работает, но, почему-то, не нравится :)
старый синтаксис RSpec позволяет использовать allow_any_instance_of, но они сами пишут, что это является code smell.
Как сделать более правильно? Или сейчас уже сделано все как надо?
Спасибо.