Как заглушить запрос ShopifyAPI::Theme.all в RSPEC

Я выполняю тестирование RSPEC, и мне нужно заглушить или сделать поддельный запрос, чтобы вернуть статический хэш.

У меня есть:

ShopifyAPI::Theme.all.select{|t| t.role == "main"}.first

Я знаю, как заглушить это ShopifyAPI::Theme.all,

Нравится: allow(ShopifyAPI::Theme).to receive(:all).and_return( test_main_theme )

И у меня есть вспомогательный метод.

 def test_main_theme
  {
   "id": 2335539244,
   "name": "Debut",
   "created_at": "2017-12-22T18:13:24-05:00",
   "updated_at": "2018-04-11T20:16:17-04:00",
   "role": "main",
   "theme_store_id": 796,
   "previewable": true,
   "processing": false
 }
end

но наличие .select{|t| t.role == "main"}.first — это другой способ.

Заранее спасибо.


person aldrien.h    schedule 12.04.2018    source источник


Ответы (1)


Можешь попробовать:

allow(ShopifyAPI::Theme).to receive_message_chain(:all, :select, :first)
  .and_return(test_main_theme)

см. https://relishapp.com/rspec/rspec-mocks/v/3-5/docs/working-with-legacy-code/message-chains

person jethroo    schedule 12.04.2018
comment
Не могли бы вы проверить это, если оно будет работать. фрагменты/x.liquid, {theme_id: 2335539244}).and_return(test_asset_hash) - person aldrien.h; 12.04.2018
comment
lgtm с первого взгляда ;) - person jethroo; 12.04.2018