gpt4 book ai didi

ruby - 你如何使用 Fog::Compute 对象的 Rspec any_instance stub ?

转载 作者:数据小太阳 更新时间:2023-10-29 08:37:58 26 4
gpt4 key购买 nike

尝试对 Fog::Compute 对象的方法进行 stub ,如下所示:

describe EtHaproxy::Helpers do
let(:helpers) { Object.new.extend(EtHaproxy::Helpers) }
before do
Fog.mock!
Fog::Mock.reset

@fog_conn = Fog::Compute.new(
provider: 'AWS',
aws_access_key_id: 'MOCK_ACCESS_KEY',
aws_secret_access_key: 'MOCK_SECRET_KEY'
)
@fog_conn.data[:limits][:addresses] = 25
2.times do
@fog_conn.allocate_address('vpc')
end

@mock_eips = @fog_conn.addresses.map { |a| a.public_ip }

Fog::Compute.any_instance.stub(:addresses).and_return(@fog_conn.addresses)
end

describe 'any_instance.stub' do
it 'returns the specified value on any instance of the class' do
o = Fog::Compute.new(
provider: 'AWS',
aws_access_key_id: 'MOCK_ACCESS_KEY',
aws_secret_access_key: 'MOCK_SECRET_KEY'
)
o.addresses.should eq(@fog_conn.addresses)
end
end
end

但是,在运行此示例规范测试(从 the Relish docs for Rspec 2.14 中提取)时,它失败了,说明:

Failure/Error: Fog::Compute.any_instance.stub(:foo).and_return(:return_value)
NoMethodError:
undefined method `any_instance' for Fog::Compute:Module

最佳答案

事实证明,当使用 Fog.Mock! 时,Fog 创建了一个便利层,而您实际上并不是在处理 Fog::Compute,而是,我们以 Fog::Compute::AWS::Mock 结束。因此,要 stub 该方法,我们需要这样做:

Fog::Compute::AWS::Mock.any_instance.stub(:addresses).and_return(@fog_conn.addresses)

对该对象进行 stub 会导致事情按预期工作。

关于ruby - 你如何使用 Fog::Compute 对象的 Rspec any_instance stub ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23548956/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com