2016-11-19 5 views
0

Я использую Rails 5 API, Pundit, и все идет хорошо. Я пытаюсь проверить этот конкретный случай, если, если вы не являетесь владельцем ресурса, вы не сможете просмотреть информацию этого пользователя.Rails Pundit mini test 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 

Я провел тест, все остальные прошли, кроме этого, который говорит:

Error: 
UsersControllerTest#test_user_show_-_cannot_show_other_user's_info: 
Pundit::NotAuthorizedError: not allowed to show? 

я пишу исключение 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 и блок кода, чтобы утверждать об ошибке будет раи sed для.

Другими словами:

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

Мои другие запросы, как правило, появляется синтаксис тестирования RSpec. Оставляя этот ответ здесь для будущих разработчиков Rails, использующих Mini Test, таких как я: D

Смежные вопросы