gpt4 book ai didi

ruby-on-rails - 如何断言 Rails 方法不会抛出 NoMethodError

转载 作者:行者123 更新时间:2023-12-05 01:47:02 25 4
gpt4 key购买 nike

在我的 Rails 应用程序中,我正在进行单元测试,我预计在调用某个方法时会出现错误。

test "sending a logout request while not logged should not return an error" do
assert_nothing_raised do
do_a_logout
end
end

问题是当 do_a_logout 出错时,测试一直报告为 Error 而不是 Failure

错误是NoMethodError: NoMethodError: undefined method 'forget' for nil:NilClass

它来自 do_a_logout 调用下面两层或三层的方法

def forget user
user.forget
cookies.delete :user_id
cookies.delete :remember_token
end

在这里,我期望的错误是 user 为 nil 并且在调用 forget 时失败。我怎样才能使测试报告成为失败而不是错误

最佳答案

您想使用 assert_raise使用您期望的异常类:

assert_raise(NoMethodError) { do_a_logout }

预计到达时间:如果您想测试没有出现错误,您可以使用 assert_nothing_raised :

assert_nothing_raised { do_a_logout }
assert_nothing_raised(NoMethodError) { do_a_logout }

然而正如所指出的on SOelsewhere ,没有充分的理由使用此断言,因为它是多余的:您从不期望引发错误,除非您另有说明。

此外,与在没有断言的情况下简单地运行规范相比,它给出的失败帮助较小。特别是,在发生错误时使用 assert_nothing_raised 运行将仅向您提供对 assert_nothing_raised 调用的回溯,而在没有此断言的情况下运行规范将提供对实际错误的回溯那正在发生。

关于ruby-on-rails - 如何断言 Rails 方法不会抛出 NoMethodError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31837649/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com