2016-11-19 43 views
0

我正在使用Rails 5 API,Pundit和一切进展顺利。我试图测试这个特定的情况,如果你不是资源所有者,你不应该能够查看该用户的信息。Rails Pundit迷你测试assert_response Pundit :: NotAuthorizedError

因此,我得到了一些用户夹具的样本数据,莎拉和吉姆是他们中的两个。

我这里得到这个测试案例:

test "user show - cannot show other user's info" do 
    get user_path(@sarah), headers: user_authenticated_header(@jim) 
    assert_raises(Pundit::NotAuthorizedError) 
end 

我跑我的测试,所有其他的人过去了,除了这其中一个说:

​​

我是否正确地写assert_raise例外呢?为什么我的测试不通过?似乎一旦错误发生,我测试中的下一行就不再运行了。

回答

1

我讨厌它,当我把我的回答自己的问题......远:(

更多的搜索后,原来是这样的:

test "user show - cannot show other user's info" do 
    assert_raises(Pundit::NotAuthorizedError) { 
    get user_path(@sarah), headers: user_authenticated_header(@jim) 
    } 
end 

我找到了答案找到此之后:

http://apidock.com/ruby/Test/Unit/Assertions/assert_raise

assert_raises需要一个错误类型,在我的情况Pundit::NotAuthorizedError和一个代码块断言误差将RAI sed for。

换句话说:

assert_raises(ExceptionType) { 
    // my code to execute that will cause the error to happen 
} 

我的其他搜索通常变成了RSpec的测试语法。对于未来的Rails开发人员,使用像我这样的迷你测试来解答这个问题:D