2016-12-07 1 views
0

클래스가없는 두 가지 메소드가 있는데, 둘 다 동일한 코드를 갖지만 리턴 오브젝트가 다릅니다. 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) 

문제처럼 조롱하려합니다. 이 문제를 도와주세요.

답변

0

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