似乎我可以为.to
指定异常类但不允许为.not_to
指定异常类?
这究竟是什么原因?
Failure/Error: expect{ smth }.not_to raise_exception SomeExceptionClass
ArgumentError:
`expect { }.not_to raise_error(SpecificErrorClass)` is not valid, use `expect { }.not_to raise_error` (with no args) instead
答案 0 :(得分:2)
扩大Nakilon的答案:
这是他们的设计决定。看起来他们认为这不是一个很好的测试指定,因为如果你期望某个错误不被引发,那么测试将在以下情况下通过:
......这至少是不精确的。可能你的代码只想做其中的一件事。
这似乎是推理,无论如何 - 我不想说它有多公平。
答案 1 :(得分:0)
来自changelog:
让
expect { }.to_not raise_error(SomeSpecificClass, message)
,expect { }.to_not raise_error(SomeSpecificClass)
和expect { }.to_not raise_error(message)
无效,因为它们很容易隐藏失败。 相反,使用expect { }.to_not raise_error
(没有args)。 (山姆 菲彭)
答案 2 :(得分:0)
似乎他们意识到没有理由弃用异常类参数,因此它目前有效:https://www.relishapp.com/rspec/rspec-expectations/v/3-5/docs/built-in-matchers/raise-error-matcher
例如,在Selenium中,在检查某些条件成为真之后:
Selenium::WebDriver::Wait.new(
message: message,
timeout: timeout,
).until do
f() == x
end
现在很容易等待它在下一秒内不会因为否定超时异常而变为假:
begin
Selenium::WebDriver::Wait.new(
timeout: timeout,
).until do
f() != x
end
raise message
rescue Selenium::WebDriver::Error::TimeOutError
end