我有一个用户类,其中电子邮件是唯一的,但仅适用于租户:
class User < ActiveRecord::Base
validates :email, :uniqueness => {:scope => :tenant_id, :allow_blank => true}
#...
end
我正在尝试测试:
class UserTest < ActiveSupport::TestCase
context "a user" do
setup { @user = create :user }
subject { @user }
should validate_uniqueness_of(:email).scoped_to(:tenant_id)
end
end
但测试失败并显示以下信息:
期望错误包含“has already been taken”,当电子邮件设置为“joseph.allen_1@example.com”时,出现错误:["email has already been taken (\"joseph.allen_1@example.com\")", "first_name can't be blank (nil)", "last_name can't be blank (nil)"](tenant_id的值不同)
这引起了很多问题。为什么错误消息不匹配?看起来是因为实际的电子邮件地址包含在错误消息中,但为什么要包含它?当我从UI生成错误时,似乎没有包含它:
此外,最后它说正在尝试使用不同的租户进行测试,如果是真的,那么就不应该生成任何错误(当我运行应用程序本身时就不会),但是,为什么它期望出现错误?只有在tenant_id相同时才应该期望出现错误。
这太令人困惑了。你们有什么想法或如何正确测试这个?