gpt4 book ai didi

ruby - Rspec - 如何 stub 第 3 方异常

转载 作者:太空宇宙 更新时间:2023-11-03 16:49:08 25 4
gpt4 key购买 nike

我正在尝试测试我是否能够捕获这些 AWS 异常:

begin
s3_client = S3Client.new
s3_file = s3_client.write_s3_file(bucket, file_name, file_contents)
rescue AWS::Errors::ServerError, AWS::Errors::ClientError => e
# do something
end

我的 Rspec 3 代码:

expect_any_instance_of(S3Client).to receive(:write_s3_file).and_raise(AWS::Errors::ServerError)

但是当我测试这个 stub 时,我得到一个类型错误:

exception class/object expected

我必须包括 AWS::Errors::ServerError 吗?如果是这样,我该怎么做?我正在使用 aws-sdk-v1 gem。

谢谢。

最佳答案

我会构建一个端口,然后注入(inject)一个即将向您抛出错误的 stub 对象。让我解释一下:

class ImgService
def set_client(client=S3Client.new)
@client = client
end

def client
@client ||= S3Client.new
end

def write(bucket, file_name, file_contents)
begin
@client.write_s3_file(bucket, file_name, file_contents)
rescue AWS::Errors::ServerError, AWS::Errors::ClientError => e
# do something
end
end
end

测试:

describe "rescuing an AWS::Error" do
before :each do
@fake_client = double("fake client")
allow(@fake_client).to receive(:write_s3_file).and_raise(AWS::Errors::ServerError)

@img_service = ImgService.new
@img_service.set_client(@fake_client)
end
# ...
end

关于ruby - Rspec - 如何 stub 第 3 方异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26665520/

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