集成测试中的链接崩溃无效,而不是产生Flash错误消息

时间:2015-08-07 23:12:55

标签: ruby-on-rails ruby ruby-on-rails-4 testing integration-testing

在集成测试中,我有:

get activation_path("invalid token")
assert flash[:danger]
assert_redirected_to root_path

activation_path指的是验证令牌的路径。正确的路径如下:get activation_path("valid token", inv: '10')。因此,在测试中,链接不包含inv的值,因此是无效链接。控制器方法使用inv来查找邀请:

@invitation = Invitation.find(params[:inv])

所以预期的行为是无效链接产生闪存错误和重定向。但是,测试的第一行失败,错误为:

  

ActiveRecord :: RecordNotFound:找不到邀请' id' =

这是指控制器方法的第一个行,如上所述:

@invitation = Invitation.find(params[:inv])

为什么测试失败?我希望它只返回nil @invitation,但它会生成错误。我应该如何调整(控制器方法?)以考虑提交此类无效链接的用户?

更新:我也尝试过:

get activation_path("valid token", inv: '88888888888')
assert flash[:danger]   # There's no invitation with that number
assert_redirected_to root_path

此测试也无法指向控制器方法的第一行:

  

ActiveRecord :: RecordNotFound:无法找到邀请   ' id'

的范围值

1 个答案:

答案 0 :(得分:1)

根据Rails docs

  

find方法将引发ActiveRecord :: RecordNotFound异常   如果没有找到匹配的记录。

默认情况下,Rails通过在生产和暂存中呈现404响应来响应ActiveRecord::RecordNotFound错误。当用户访问不存在记录的URL时,这通常是所需的响应。

如果您希望它返回nil而不是引发错误,请改为使用find_by_id

Invitation.find_by_id 0
=> nil