2016-11-23 16 views
5

Vì vậy, trong mã của tôi, tôi có phương pháp này, tôi đang cố gắng để kiểm tra:RSpec - sai số đối số khi tăng lỗi

# checks if a file already exists on S3 
    def file_exists?(storage_key) 
    begin 
     s3_resource.bucket(@bucket).object(storage_key).exists? 
    rescue Aws::S3::Errors::Forbidden => e 
     false 
    end 
    end 

Bây giờ tôi đang cố gắng để làm cho hai trường hợp thử nghiệm - một cho khi tập tin tồn tại , và một cho khi nó không.

Tập trung vào trường hợp lỗi. Tôi muốn gỡ bỏ số exists? để tăng lỗi Aws::S3::Errors::Forbidden để phương thức file_exists? sẽ trả về sai.

Đây là những gì mã kiểm tra của tôi trông giống như:

it "returns false if the file doesn't already exist" do 
    allow_any_instance_of(Aws::S3::Object).to receive(:exists?).and_raise(
     Aws::S3::Errors::Forbidden 
    ) 
    expect(instance.file_exists?('foo')).to be false 
    end 

Chạy thử nghiệm này, tôi thấy điều này:

wrong number of arguments (given 0, expected 2) 
    # ./lib/s3_client_builder.rb:48:in `file_exists?' 

Thực sự không rõ ràng những gì đang xảy ra ở đây, vì phương pháp file_exists? chắc chắn không có một sự tinh thần của 2 cũng không phải là phương pháp exists? Tôi đang stubbing.

Để chẩn đoán điều này, tôi đặt điểm ngắt trong khối begin. Tôi thử chạy dòng <object>.exists? và gặp lỗi tương tự.

Trả lời

10

Hóa ra vấn đề là với:

and_raise(
    Aws::S3::Errors::Forbidden 
) 

Chạy điều này cho thấy các lỗi tương tự:

raise(Aws::S3::Errors::Forbidden.new(nil, nil)) 
:

raise(Aws::S3::Errors::Forbidden) 

gì công việc này là

Các vấn đề liên quan