如何测试设计是否使用登录而不是电子邮件签署用户?

时间:2015-03-13 22:01:54

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

我正在尝试确认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>'

为什么不起作用?我做错了什么?

1 个答案:

答案 0 :(得分:0)

我在include Devise::TestHelpers test/test_helper.rb中添加class ActiveSupport::TestCase ... include Devise::TestHelpers end 时错误消失了{/ 3}}:

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

one: login: login encrypted_password: <%= Devise.bcrypt(User, 'password') %> documentation):

{{1}}