Таким образом, в моем коде у меня есть этот метод, который я пытаюсь проверить:Rspec - неверное число аргументов при повышении ошибки
# 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
Теперь я пытаюсь сделать два тестовых случай - один, когда файл существует , а другой - когда нет.
Фокусировка на случае отказа. Я хочу заглушить exists?
, чтобы поднять ошибку Aws::S3::Errors::Forbidden
, чтобы метод file_exists?
вернул значение false.
Вот что мой тестовый код выглядит следующим образом:
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
Выполнение этого теста я вижу это:
wrong number of arguments (given 0, expected 2)
# ./lib/s3_client_builder.rb:48:in `file_exists?'
На самом деле не ясно, что происходит здесь, так как метод file_exists?
определенно не имеет arity of 2 и не делает метод exists?
, которым я занимаюсь.
Чтобы диагностировать это, я поставил точку останова в блоке begin
. Я пытаюсь запустить строку <object>.exists?
и получить ту же ошибку.