我无法使用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
答案 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