Как проверить цепной вызов в RSPE C? - PullRequest
0 голосов
/ 05 марта 2020

У меня есть вызов выглядит как

1) foo1 => MyModel.where(id: my_model_ids)
2) foo2 => MyModel.where('date > :new_date', {new_date: DateTime.new(0)})
3) foo2.sum(:count)

Как я могу проверить цепочку вызовов? Я попробовал это

where_mock = instance_double(ActiveRecord::Relation)
result_mock = instance_double(ActiveRecord::Relation)

filter = 'date > :new_date'
new_data_hash = {new_date: DateTime.new(0)}


expect(where_mock).to receive(:where).with(filter, new_data_hash).and_return(result_mock)
expect(result_mock).to receive(:sum)

Но это не сработало

1 Ответ

1 голос
/ 05 марта 2020

Я думаю, что вы ищете receive_message_chain, https://relishapp.com/rspec/rspec-mocks/docs/working-with-legacy-code/message-chains

Пример, который они приводят:

allow(Article).to receive_message_chain("recent.published") { [Article.new] }

Стоит отметить, что использование этот метод часто является симптомом c запаха кода.

Если здесь вы проверяете, что сообщение получено, а не вывод, вы можете протестировать первый вызов метода изолированно, заглушить результат и затем проверьте, что заглушка получает второй вызов метода.

...