如何在Rails集成/控制器单元测试中注销用户?

时间:2017-05-16 06:45:50

标签: ruby-on-rails unit-testing devise

我有以下测试以确保需要登录。大多数测试需要登录用户,因此我让用户登录设置。但是对于这个测试,我需要他们退出。

require 'test_helper'

class DealsControllerTest < ActionDispatch::IntegrationTest
  include Warden::Test::Helpers

  setup do
    @deal = deals(:one)
    @user = users(:one)
    # https://github.com/plataformatec/devise/wiki/How-To:-Test-with-Capybara
    @user.confirmed_at = Time.now
    @user.save
    login_as(@user, :scope => :user)
  end

  teardown do
    Warden.test_reset! 
  end

  test "require sign in for deal list" do
    logout @user
    get deals_url
    assert_redirected_to new_user_session_path
  end

我收到错误

  

失败:   DealsControllerTest #test_require_sign_in_for_deal_list [C:/Users/Chloe/workspace/fortuneempire/test/controllers/deals_controller_test.rb:35]:   预期响应是&lt; 3XX:重定向&gt;,但是&lt; 200:OK&gt;

它说它会起作用,但它只是不起作用。

https://github.com/plataformatec/devise/wiki/How-To:-Test-with-Capybara

  

如果出于某种原因需要注销登录的测试用户,可以使用Warden的注销助手。

     

注销(:用户)

Rails 5.0.2
设计4.2.1

1 个答案:

答案 0 :(得分:0)

logout本身没有任何参数。也许logout :user也可以。我没有使用FactoryGirl,因此将它混淆为FactoryGirl符号。