RSpec 3:期望 object.do_something 不会引发特定类型的错误
RSpec 3: expect object.do_something to NOT raise a particular kind of error
我想测试一个特定方法是否不会引发 class AError 错误。它可以引发 BError、ArgumentError、几乎任何其他类型的错误,或者没有错误,只是不是 AError。是否有任何未弃用的(从 RSpec 3 开始)的方法来做到这一点?
我试过了
expect { object.do_something }.not_to raise_error(AError)
但我明白了
ArgumentError:
`expect { }.not_to raise_error(SpecificErrorClass)` is not valid,
use `expect { }.not_to raise_error` (with no args) instead
无参数方法的问题是测试会因任何类型的错误而失败,而它应该传递除 AError 之外的任何错误。
此文档似乎没有帮助:https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers/raise-error-matcher
好像老版本的RSpec有办法处理这种情况,不明白新版本的RSpec是怎么回事
所以我很困惑。谢谢。
您可以在此处阅读有关为何删除此内容的讨论https://github.com/rspec/rspec-expectations/issues/231
如果您真的必须测试这种情况,您可以采用不同的方式:
begin
object.do_something
rescue StandardError => e
# expect e to not be AError
end
这个特定的语法解决了问题:
it 'do_something does not raise AError' do
begin
expect { object.do_something }.not_to raise_error
rescue RSpec::Expectations::ExpectationNotMetError => e
expect(e.message).not_to include 'AError'
end
end
我想测试一个特定方法是否不会引发 class AError 错误。它可以引发 BError、ArgumentError、几乎任何其他类型的错误,或者没有错误,只是不是 AError。是否有任何未弃用的(从 RSpec 3 开始)的方法来做到这一点?
我试过了
expect { object.do_something }.not_to raise_error(AError)
但我明白了
ArgumentError:
`expect { }.not_to raise_error(SpecificErrorClass)` is not valid,
use `expect { }.not_to raise_error` (with no args) instead
无参数方法的问题是测试会因任何类型的错误而失败,而它应该传递除 AError 之外的任何错误。
此文档似乎没有帮助:https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers/raise-error-matcher
好像老版本的RSpec有办法处理这种情况,不明白新版本的RSpec是怎么回事
所以我很困惑。谢谢。
您可以在此处阅读有关为何删除此内容的讨论https://github.com/rspec/rspec-expectations/issues/231
如果您真的必须测试这种情况,您可以采用不同的方式:
begin
object.do_something
rescue StandardError => e
# expect e to not be AError
end
这个特定的语法解决了问题:
it 'do_something does not raise AError' do
begin
expect { object.do_something }.not_to raise_error
rescue RSpec::Expectations::ExpectationNotMetError => e
expect(e.message).not_to include 'AError'
end
end