2016-11-19 77 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