我为我的rails应用程序编写了一个集成测试,用于测试是否应该将提供不匹配的确认密码的用户成功添加到数据库中。我写的测试是成功的,这是很好的部分。真正令人烦恼的部分是:使用2部分验证验证密码确认
validates :password_confirmation, :presence => true, if: lambda { |m| m.password.present? }
validates_confirmation_of :password, if: ->{ password.present? }
现在因为在我的测试中我尝试创建一个具有不匹配密码确认的用户,rails会自动添加消息"密码确认不匹配密码"到user.errors.full_messages
,其中user
是我尝试(并且失败)创建的用户。当我运行rake test:integration
时,我得到以下输出到终端:
DROBRO~> rake test:integration
Run options: --seed 2189
# Running:
Password confirmation doesn't match Password
Password confirmation doesn't match Password
Password confirmation doesn't match Password
.
Finished in 0.805430s, 1.2416 runs/s, 12.4157 assertions/s.
1 runs, 10 assertions, 0 failures, 0 errors, 0 skips
当我只是想让它看起来像这样:
DROBRO~> rake test:integration
Run options: --seed 2189
# Running:
.
Finished in 0.805430s, 1.2416 runs/s, 12.4157 assertions/s.
1 runs, 10 assertions, 0 failures, 0 errors, 0 skips
所以我有两个问题:
1)我怎样才能将这些令人烦恼的错误信息静音,这些错误信息会打印在我的'' F'
中间?2)为什么在我只尝试创建此用户一次时打印出3次消息?
感谢您的帮助
这里有一些额外的代码可以与上述问题一起使用。我没有明确地在任何地方明确地将错误消息打印到终端的任何puts
语句,它似乎是自己做的。
这是测试本身。我只需调用super_create_fail
,就可以在文件中其他地方的测试方法中运行此方法。我正在使用修补程序请求,因为用户首次访问应用程序时会创建该应用程序,并且可以访问该应用程序的公共功能。这"超级创造"通过让用户提供他们的名字并给他们密码等来更新数据库中的信息。
def super_create_fail
#super create user
patch "/api/users/2/super_create", :user => {:first_name => "John", :last_name => "Doe", :email => "jdoe1@williams.edu", :password => "anothertest", :password_confirmation => "wrongpassword"}, :format => :json
user = assigns(:user)
assert_response :success, "no response from database"
assert_nil user.password_salt, "password_salt should be nil with wrong pw confirmation"
assert_nil user.password_hash, "password_hash should be nil with wrong pw confirmation"
end
此测试成功,但打印上面显示的消息,这些消息来自上述方法中的用户没有匹配的:password
和password_confirmation
这一事实。这是我能想到的所有相关代码,但如果你能想到任何更有助于随意问的话。