У меня есть модель, как это:Как заглушить неактивные модели рекордов в Rails?
class Thing
class << self
def do_stuff(param)
result1 = method_one(param)
result2 = method_two(result1)
end
def method_one(param)
# tranformation
end
def method_two(result1)
# transformation
end
end
end
Как я могу проверить, что do_stuff
правильно выполняет методы method_one
и method_two
с правильными аргументами? Я пробовал mock_model/mock_class, но это не имеет для меня никакого смысла. Я прочитал документацию, но мне все еще трудно понять это.
Мой тест выглядит следующим образом:
require 'rails_helper'
RSpec.describe Thing, type: :model do
let!(:param) { create(:param) }
describe '#do_stuff' do
thing = double('thing')
expect(thing).to receive(:method_one).with param
thing.do_stuff param
end
end
Почему это не работает? Ошибка, которую я получаю, это то, что вещь получила неожиданный параметр сообщения. Но это было вполне ожидаемо, и это был тест. Где я иду не так?
точно. для того, чтобы сделать это более сугубо, методы класса должны быть пропущены против класса, а не экземпляра. – jaydel
Отличное спасибо! Это имеет смысл (также оцените время, затрачиваемое на проведение теста!). – user3162553