Насмешливая проблема Chefspec

У меня есть два метода без класса, они оба имеют одинаковый код, но возвращаемый объект отличается.

def get_load_balancer(network_client, resource_group_name, load_balancer_name)
  promise = network_client.load_balancers.get(resource_group_name, load_balancer_name)
  load_balancer = promise.value!
  return load_balancer.body
end

def get_public_ip(network_client, resource_group_name, public_ip_name)
  promise = network_client.public_ip_addresses.get(resource_group_name, public_ip_name)
  public_ip = promise.value!
  return public_ip.body
end

Я пытаюсь издеваться над этим, как

@network_client = NetworkResourceProviderClient.new(token)

@promise_lb = Concurrent::Promise.new
allow(@network_client).to receive_message_chain(:load_balancers, :get).and_return(@promise_lb)
allow(@promise_lb).to receive(:value!).and_return(response_lb)

@promise_pip = Concurrent::Promise.new
allow(@network_client).to receive_message_chain(:public_ip_addresses, :get).and_return(@promise_pip)
allow(@promise_pip).to receive(:value!).and_return(response_pip)

Проблема в том, что передача объекта в насмешку не работает. пожалуйста, помогите мне с этой проблемой.


person Samawia Moin    schedule 07.12.2016    source источник


Ответы (1)


Почему вы используете Concurrent::Promise? ChefSpec — это библиотека RSpec, вы должны использовать систему rspec-mocks.

before do
  network_client = instance_double(NetworkResourceProviderClient)
  lbs = double()
  allow(lbs).to receive(:get).with('foo', 'bar').and_return(double(value!: 'baz'))
  allow(network_client).to receive(:load_balancers).and_return(lbs)
end
person coderanger    schedule 07.12.2016