Ruby on rails RubyonRails:电子邮件验证的小型测试
这绝对是一个初学者的问题,可能很明显,但我还没有找到答案 我正在尝试使用minitest验证RubyonRails中的电子邮件地址Ruby on rails RubyonRails:电子邮件验证的小型测试,ruby-on-rails,minitest,Ruby On Rails,Minitest,这绝对是一个初学者的问题,可能很明显,但我还没有找到答案 我正在尝试使用minitest验证RubyonRails中的电子邮件地址 test "should have format of email address" do user = User.create(name: "Dummy", last_name: "Dummy", email: "example.com") assert_match(/\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})
test "should have format of email address" do
user = User.create(name: "Dummy", last_name: "Dummy", email: "example.com")
assert_match(/\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i, user.email)
assert_equal ["is invalid"], user.errors[:email]
end
问题出现在最后一行assert_equal[“is invalid”]、user.errors[:email]
中
电子邮件地址example.com
故意与regex不匹配,因为我想对照失败的测试检查错误消息“is invalid”,但我不知道如何将其传递到assert_equal
:
错误消息:
Expected /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i to match "example.com".
应该是:
'is invalid.'
也许我错了,但我的理解是可以在object.errors[:symbol]中找到对象的错误消息。问题实际上发生在第二行:
assert_match(/\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i, user.email)
您使用的电子邮件是“example.com”,它无法匹配REGEXP。试着使用类似于“dummy@example.com“相反。我实际上想检查错误消息是否正确(应该是:
无效
)。这就是为什么我故意让这个测试失败(通过传递错误的电子邮件地址)。我非常确定错误消息会出现在user.errors[:email]
但这似乎不是真的。这就是我比较最后一行中的两条错误消息的原因。然后,您应该将这两个断言拆分为两个单独的测试方法。断言匹配失败,并且从未运行过断言相等。