У меня есть класс, который реализует метод .call
, который возвращает объект в блок, и я хотел бы узнать, как написать для этого модульный тест. Вот что у меня есть.
module A
class B < Service
def call(object_id:)
@object = Something.find(object_id)
@object.update(status: 'done')
yield @object
end
def set_to_in_progress
@object.update(status: 'in_progress')
end
end
end
class Service
def self.call(*args); new.call(*args); end
end
Затем я использую это так:
A::B.call(obj) do |object|
object.set_to_in_progress if some_other_condition?
end
Мне нужно написать модульный тест для метода call
, который проверяет, находится ли статусизменился на сделано или в процессе. Вот что у меня есть:
RSpec.describe A::B, :unit do
let(:object) { create(:something, id: 1, status: 'in_progress') }
it 'updates the status to done' do
described_class.call(object.id) do |???|
???
end
expect(object.status).to equal('done')
end
it 'updates the status to in progress' do
described_class.call(object.id) do |???|
???
end
expect(object.status).to equal('in_progress')
end
end