导轨清除,单元测试控制器

时间:2017-03-05 03:44:44

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

我无法使用Clearance身份验证来使用Rails控制器单元测试。我按照https://github.com/thoughtbot/clearance“控制器测试助手”的说明进行操作。如何对需要身份验证的控制器进行单元测试?

我收到以下错误:

GoalsControllerTest#test_should_get_index:
NoMethodError: undefined method `sign_in_as' for #<GoalsControllerTest:0x007f8c41c6b9c8>
    test/controllers/goals_controller_test.rb:7:in `block in <class:GoalsControllerTest>'

测试/ test_helper.rb中

require 'clearance/test_unit'

测试/控制器/ goals_controller_test.rb

require 'test_helper'

class GoalsControllerTest < ActionDispatch::IntegrationTest
  setup do
    user = User.new(fname: "Test", lname: "User", email: "testuser@test.com", password: "password")
    sign_in_as(user)
    @goal = goals(:one)
  end

2 个答案:

答案 0 :(得分:0)

您使用的是Rails 5吗? Rails 5统一集成和控制器测试ActionDispatch::IntegrationTest。当您需要clearance/test_unit时,Clearance只会将其帮助者添加到ActionController::TestCase

我认为你可以做到:

class ActionDispatch::IntegrationTest
  include Clearance::Testing::ControllerHelpers
end

test_helper.rb文件中,以便在这些测试中访问帮助程序。但是,我不确定帮助者本身是否会在这种情况下发挥作用。

如果你可以尝试一下,那会很有帮助。这也应该在Clearance中修复。由于我自己不使用TestUnit / MiniTest,我有时会想念这样的事情。

答案 1 :(得分:0)

我也遇到了同样的问题,但现在已通过此答案https://github.com/thoughtbot/clearance/issues/695

进行了修复

启用测试中的中间件:

# config/environments/test.rb
MyRailsApp::Application.configure do
  # ...
  config.middleware.use Clearance::BackDoor
  # ...
end

在我的test/test_helper.rb文件中,我编写了以下代码。

class ActionDispatch::IntegrationTest
  def manual_sign_in_as(user)
    post session_url, params: {
      session: {
        email: user.email,
        password: user.password
      }
    }
  end
end

默认情况下,从ActionDispatch :: IntegrationTest滚动5个子类的控制器测试,因此我只需要遵循https://github.com/thoughtbot/clearance上自述文件中的说明。

class PostsControllerTest < ActionDispatch::IntegrationTest
  test "user visits index page while logged in"
    user = User.create!(email: "example@example.com", password: "letmein")
    get links_url(as: user)
    # and
    post links_url(as: user), params: { post: { title: "hi" } }
  end
end