Я использую драгоценные камни pundit
и devise
. У меня есть ссылка удаления, которая отображается только в том случае, если вы являетесь администратором. У меня есть интеграционный тест, который я хотел бы проверить, что ссылка на удаление отображается только для администраторов.Ruby on Rails current_user Pundit равен нулю в тесте интеграции
test 'comment delete link shows when it should' do
log_in_as @admin
get movie_path(@movie)
assert_select 'a[href=?]', movie_comment_path(comments(:one), @movie.id)
end
Мои test_helper.rb
выглядит следующим образом:
...
class ActiveSupport::TestCase
...
def log_in_as(user, options = {})
password = options[:password] || 'password'
if integration_test?
post user_session_path, 'user[email]' => user.email, 'user[password]' => user.password
else
Devise::TestHelpers.sign_in user
end
end
private
# Returns true inside an integration test.
def integration_test?
defined?(post_via_redirect)
end
end
response.body
выглядит хорошо, но на самом деле нет никакого удаления ссылок. Есть один, когда я запускаю сервер разработки и сам посещаю страницу. Я сузил это до current_user
, который использует полис в политике, со значением nil
. Это мой comment_policy.rb
:
class CommentPolicy
attr_reader :current_user, :comment
def initialize(current_user, model)
@current_user = current_user
@comment = model
end
def create?
if @current_user
@current_user.member? or @current_user.content_creator? or @current_user.moderator? or @current_user.admin?
end
end
def destroy?
if @current_user
@current_user == @comment.user or @current_user.moderator? or @current_user.admin?
end
end
end
В заключительном замечании, я слышал, что Rails 5 выбрала для интеграции тестов вместо тестов контроллера, как мы знаем их из Rails 4 для типа по умолчанию тестов, которые будут созданы для наши контроллеры. Если это так, devise
был бы полезен из коробки при использовании Rails 5, если бы помощники , работающие в тестах контроллера, также работали в тестах интеграции. Но у меня все еще будет эта проблема pundit
, не зная, что такое current_user
? Я предполагаю, что все это прекрасно работает в тестах контроллера, потому что current_user
привязан к контроллерам? Любые и все легкие пролить на эту тему очень ценится, но я бы очень хотел выяснить, как получить интеграционные тесты для работы с этой установкой, потому что у меня около миллиарда, которые я хочу написать прямо сейчас.
большое спасибо, CSRF - это проблема с корнем для меня, теперь я хотя бы знаю, что исправить :) Хотя моя проблема не была связана с тестами, просто ошибка, которая время от времени происходит на действиях, которые обычно работают Что ж. –