Ruby on rails Rails 4设计集成测试。持久用户?

Ruby on rails Rails 4设计集成测试。持久用户?,ruby-on-rails,unit-testing,devise,Ruby On Rails,Unit Testing,Devise,我正在一个小型web应用程序中使用Desive进行身份验证,在编写一些集成测试时遇到了一些问题 测试将是简单的,例如 登录使用有效凭据 登录被拒绝,凭据无效 使用rails教程中描述的技术,而不是针对一个自主开发的身份验证系统,我正试图针对Desive对其进行改进 我可以毫无问题地使用sign_-in函数,我在一个或两个控制器测试中就是这么做的,例如 require 'test_helper' class mySimpleControllerTest < ActionControl

我正在一个小型web应用程序中使用Desive进行身份验证,在编写一些集成测试时遇到了一些问题

测试将是简单的,例如

  • 登录使用有效凭据

  • 登录被拒绝,凭据无效

使用rails教程中描述的技术,而不是针对一个自主开发的身份验证系统,我正试图针对Desive对其进行改进

我可以毫无问题地使用sign_-in函数,我在一个或两个控制器测试中就是这么做的,例如

require 'test_helper'

class mySimpleControllerTest < ActionController::TestCase

  include Devise::TestHelpers

  def setup
    @user = User.create!(
      :firstname => "ANOther",
      :surname => 'Person',
      :username=> 'aperson',
      :email => 'aperson@example.com',
      :password => 'pass123',
      :password_confirmation => 'pass123'
    )
    sign_in @user
  end

  test "should get home" do
    get :home
    assert_response :success
    assert_select "title", "TEST PAGE"
  end
end
需要“测试助手”
类mySimpleControllerTest“另一个”,
:姓氏=>“个人”,
:username=>aperson',
:email=>'aperson@example.com',
:password=>“pass123”,
:password\u confirmation=>“pass123”
)
在@user中登录
结束
测试“应该回家”吗
到家
断言:成功
断言\u选择“标题”、“测试页”
结束
结束
效果非常好。我遇到的问题是测试登录功能的集成测试。我不希望安装和拆卸功能都在其中,因为有些测试必须检查注销行为,有些测试必须检查登录行为,还有一些测试必须检查重置密码等

以下测试始终使用无效的用户名和密码进行响应,即使密码是正确的。最后,当用户名或密码不正确时,我希望这个测试通过,但现在它以这种方式响应,不管它是否正确

require 'test_helper'

class UsersLoginTest < ActionDispatch::IntegrationTest

  test "should be redirected if root_path is called when logged out" do
    get root_path
    assert_response :redirect
  end

  test "login with invalid information" do
    get new_user_session_path
    assert_template 'devise/sessions/new'
    post user_session_path, 'user[email]' => 'aperson@example.com', 'user[password]' => 'pass123'

...
需要“测试助手”
类UsersLoginTest“aperson@example.com“,”用户[密码]”=>“密码123”
...

我假设这样做的原因是因为我的测试数据库不包含真正的用户,事实上,users表当前是空的。这是有道理的,因为没有用户,它应该用无效的用户名或密码响应。但是,如果是这种情况,我如何保证在调用
rake test
时使用此默认用户填充测试数据库

在尝试了几种方法来实现这一点之后,我最终将所有测试转移到RSpec和Capybara,这将允许我将数据发布到表单中

我确实测试了持久用户是否存在问题,但情况似乎并非如此。问题似乎是

post user_session_path, 'user[email]' => ...
似乎没有发布任何东西