首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Chefspec模拟问题

Chefspec模拟问题
EN

Stack Overflow用户
提问于 2016-12-07 20:09:51
回答 1查看 51关注 0票数 0

我有两个没有类的方法,它们都有相同的代码,但返回的对象不同。

代码语言:javascript
复制
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

我试着模仿它就像

代码语言:javascript
复制
@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)

问题是,在mocking中传递对象是不起作用的。请帮我解决这个问题。

EN

回答 1

Stack Overflow用户

发布于 2016-12-07 21:05:51

你为什么要使用Concurrent::Promise?ChefSpec是一个RSpec库,你可以使用rspec-mocks系统。

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41017114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档