我最近升级到了Rails 5,同时又升级了gem bea-matchers。
我有一个带有User
属性的email
模型
电子邮件应该是唯一的,并且此唯一性不区分大小写
class User < ApplicationRecord
validates :email, uniqueness: { case_sensitive: false }
end
我正在使用rspec对此进行测试
RSpec.describe User, type: :model do
subject { build(:user) }
[...]
it { is_expected.to validate_uniqueness_of(:email).ignoring_case_sensitivity }
end
但是会引发此错误
Expected User to validate that :email is unique, but this could not be proved.
Expected the validation not to be scoped to anything, but it was scoped to :provider instead.
我正在使用devise以防万一。
kinda在这里丢失了,特别是因为它以前运行正常
非常感谢
答案 0 :(得分:2)
Devise如果使用validatable module,则会在电子邮件上添加唯一性验证。可以将验证视为累积验证,因此validates :email, uniqueness: { case_sensitive: false }
不能代替现有验证,而只是添加另一个验证。
您需要做的是删除可验证模块:
devise :invitable, :omniauthable, :database_authenticatable, :registerable,
:confirmable, :recoverable, :rememberable, :trackable
然后自己执行验证。但是我真的会首先考虑这是否是一个好主意。您是否真的要复制foo@example.com
和Foo@example.com
?