Как заглушить функции с помощью метода .try в RSPEC - PullRequest
0 голосов
/ 06 сентября 2018

Тест RSPEC ....

Учитывая, что у меня есть:

ShopifyAPI::Product.all(:params => {:page => 1, :limit => 10, published_status: 'published', fields: 'id,handle'})

Тогда я могу заглушить это:

allow(ShopifyAPI::Product).to receive(:all)
    .with(params: {page: 1, limit: 10, published_status: 'published', fields: 'id,handle'})
    .and_return( test_data )

НО возникли проблемы с методом .try (: first) .try (: handle) , как показано ниже:

ShopifyAPI::Product.all(:params => {:page => 1, :limit => 10, published_status: 'published', fields: 'id,handle'}).try(:first).try(:handle)

КОД:

# MODEL
def test_product_handle
  ShopifyAPI::Product.all(:params => {:page => 1, :limit => 10, published_status: 'published', fields: 'id,handle'}).try(:first).try(:handle)
end


# CONTROLLER
def test
  @test_product_handle = @test.test_product_handle
end

# RSPEC HELPER
def test_product_handles
  [{id: 536491098170, handle: "awesome-sneakers"}, {id: 536491032634, handle: "cool-kicks"}]
end

# RSPEC

it "assigns value" do
  data = to_recursive_ostruct(test_product_handles.try(:first)).try(:handle) 
  # above returns "awesome-sneakers"

  allow(ShopifyAPI::Product).to receive(:all)
    .with(params: {page: 1, limit: 10, published_status: 'published', fields: 'id,handle'})
    .and_return( data )


  get :test

  expect(assigns(:test_product_handle)).to eq(data) # FAILED
  # BUT assigns(:test_product_handle) returns nil
end

Все, что нужно отрегулировать / добавить в моем коде выше, чтобы заглушить его.

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

1 Ответ

0 голосов
/ 06 сентября 2018

Попробуйте это:

data = test_product_handles.map { |hash| to_recursive_ostruct(hash) }
# => Array of OpenStruct objects

allow(ShopifyAPI::Product).to receive(:all).with(params: { page: 1, limit: 10, published_status: 'published', fields: 'id,handle' }) { data }
...