如何测试设计是否使用登录而不是电子邮件登录用户?
How to test if devise is signing users in with login, not email?
我正在尝试确认 devise
是否使用登录,而不是电子邮件登录。这就是我目前所知道的:
test/controllers/sessions_controller_test.rb
:
require 'test_helper'
class Devise::SessionsControllerTest < ActionController::TestCase
test "should sign in using login" do
@request.env["devise.mapping"] = Devise.mappings[:user]
post :create, user: {login: 'login', password: 'password'}
assert_response :success
end
end
现在它说:
1) Error:
Devise::SessionsControllerTest#test_should_sign_in_using_login:
NoMethodError: undefined method `authenticate?' for nil:NilClass
test/controllers/sessions_controller_test.rb:7:in `block in <class:SessionsControllerTest>'
为什么不起作用?我做错了什么?
我在 test/test_helper.rb
中添加 include Devise::TestHelpers
后错误消失了,因为 documentation 建议:
class ActiveSupport::TestCase
...
include Devise::TestHelpers
end
现在我的测试是这样的:
test/controllers/sessions_controller_test.rb
:
require 'test_helper'
class Devise::SessionsControllerTest < ActionController::TestCase
test "should have login field" do
@request.env["devise.mapping"] = Devise.mappings[:user]
get :new
assert_select '[name="user[login]"]'
end
test "should sign in using login" do
@request.env["devise.mapping"] = Devise.mappings[:user]
post :create, user: {login: 'login', password: 'password'}
assert_redirected_to root_url
end
end
test/fixtures/users.yml
(how to put password in a fixture):
one:
login: login
encrypted_password: <%= Devise.bcrypt(User, 'password') %>
我正在尝试确认 devise
是否使用登录,而不是电子邮件登录。这就是我目前所知道的:
test/controllers/sessions_controller_test.rb
:
require 'test_helper'
class Devise::SessionsControllerTest < ActionController::TestCase
test "should sign in using login" do
@request.env["devise.mapping"] = Devise.mappings[:user]
post :create, user: {login: 'login', password: 'password'}
assert_response :success
end
end
现在它说:
1) Error:
Devise::SessionsControllerTest#test_should_sign_in_using_login:
NoMethodError: undefined method `authenticate?' for nil:NilClass
test/controllers/sessions_controller_test.rb:7:in `block in <class:SessionsControllerTest>'
为什么不起作用?我做错了什么?
我在 test/test_helper.rb
中添加 include Devise::TestHelpers
后错误消失了,因为 documentation 建议:
class ActiveSupport::TestCase
...
include Devise::TestHelpers
end
现在我的测试是这样的:
test/controllers/sessions_controller_test.rb
:
require 'test_helper'
class Devise::SessionsControllerTest < ActionController::TestCase
test "should have login field" do
@request.env["devise.mapping"] = Devise.mappings[:user]
get :new
assert_select '[name="user[login]"]'
end
test "should sign in using login" do
@request.env["devise.mapping"] = Devise.mappings[:user]
post :create, user: {login: 'login', password: 'password'}
assert_redirected_to root_url
end
end
test/fixtures/users.yml
(how to put password in a fixture):
one:
login: login
encrypted_password: <%= Devise.bcrypt(User, 'password') %>