Я думаю, что это связано с тем, что кэширование включено или не включено в ваших тестах:
вы можете установить такие ожидания с текущей реализацией в вашем примере метода:
expect(Rails).to receive_massage_change(:cashe, :fetch).and_return(expected_value)
you также можно внедрить экземпляр ProcedureService
в метод и установить для него ожидание следующим образом:
procedure_service_instance = instance_double('ProcedureService', generate: some_value_you_want_to_be_returned)
expect(procedure_service_instance).to receive(:generate)
, если вы сделаете свой пример метода следующим образом:
def method_example
data = Constant.fetch_from_cashe(cache_key)
procedure_service.generate
data
end
тогда вы можете git избавление от receive_message_chain
ожидание и использование:
expect(Constant).to receive(:fetch_from_cashe).with(cashe_key).and_return(expected_value)
expect_any_instance_of(ProcedureService).to receive(:generate){ some_fake_return_value }
также вы можете включить кэширование в своих тестах, проверьте следующие ссылки: link1 , link2 , link3
Я не знаю точно, где и как написан ваш оригинал, но на основании предоставленного вами примера метода, я думаю, установка ожидания для методов, которые будут отправлены, поможет. и обратите внимание, что ваша цель состоит не в том, чтобы проверить обналичивание рельсов, а в том, чтобы убедиться, что ваш код использует его так, как вы хотите.