Więc w moim kodu mam tej metody próbuję testu:rspec - niewłaściwa liczba argumentów podczas podnoszenia błąd
# 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
Teraz próbuję zrobić dwa przypadki testowe - jeden dla kiedy istnieje plik i jeden, gdy nie.
Skoncentrowanie się na przypadku awarii. Chcę wykasować exists?
, aby podnieść błąd Aws::S3::Errors::Forbidden
, aby metoda file_exists?
zwróciła wartość false.
Oto co mój kod testowy wygląda następująco:
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
Uruchomienie tego testu widzę to:
wrong number of arguments (given 0, expected 2)
# ./lib/s3_client_builder.rb:48:in `file_exists?'
naprawdę nie wiadomo, co się tu dzieje, ponieważ metoda file_exists?
pewno nie ma arytet 2, ani też nie jestem obciążony metodą exists?
.
Aby zdiagnozować to, umieściłem punkt przerwania w bloku begin
. Próbuję uruchomić linię <object>.exists?
i uzyskać ten sam błąd.