我有一些RSpec代码。 我(或不是我的)类可以(或不)调用特定的异常。 Ex,Class :: Foo :: Bar :: TimeOutError。 我想检查一下。
describe :describe_description do
before :all do
object = Class.new
# method can be call Class::Foo::Bar::TimeOutError
object.method
end
it :exception do
expect {}.to_not raise_error Class::Foo::Bar::TimeOutError
end
end
此代码有效,但RSpec写了警告:
警告:使用
expect { }.not_to raise_error(SpecificErrorClass)
会产生误报,因为任何其他错误都会导致期望通过,包括Ruby提出的那些(例如NoMethodError,NameError和ArgumentError),这意味着您打算测试的代码可能甚至没有达到。而是考虑使用expect {}.not_to raise_error
或expect { }.to raise_error(DifferentSpecificErrorClass)
。可以通过设置RSpec::Expectations.configuration.on_potential_false_positives = :nothing
来禁止此消息。
如何修复代码以使RSpec正常工作并且不会发出警告?
答案 0 :(得分:1)
不,如果没有此警告,则无法在规范中应用expect {}.to_not raise_error
(这就是添加此警告的全部内容)。
从逻辑上讲这是没有意义的,因为您不需要显式检查未引发的错误类型。
场景1 。代码成功执行(即完全没有错误)。然后通过测试本身就意味着没有抛出Class::Foo::Bar::TimeOutError
。
方案2 。引发另一种错误。然后expect {}.to_not raise_error Class::Foo::Bar::TimeOutError
并没有进行任何测试,它仍然只是通过而产生了误报。
方案3 。如果您确实要使用它,请使用设置on_potential_false_positives
进行抑制,然后测试将继续进行,而不会出现警告。如果通过,则与使expect {}.to_not raise_error
仍然多余的情况没有任何区别。