不匹配时,应匹配器validate_uniqueness_of返回已确定范围

时间:2019-02-28 11:05:11

标签: ruby-on-rails rspec

我最近升级到了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在这里丢失了,特别是因为它以前运行正常

非常感谢

1 个答案:

答案 0 :(得分:2)

Devise如果使用validatable module,则会在电子邮件上添加唯一性验证。可以将验证视为累积验证,因此validates :email, uniqueness: { case_sensitive: false }不能代替现有验证,而只是添加另一个验证。

您需要做的是删除可验证模块:

devise :invitable, :omniauthable, :database_authenticatable, :registerable,
         :confirmable, :recoverable, :rememberable, :trackable

然后自己执行验证。但是我真的会首先考虑这是否是一个好主意。您是否真的要复制foo@example.comFoo@example.com