Ruby on rails 用户验证电子邮件唯一性Rspec FactoryGirl

Ruby on rails 用户验证电子邮件唯一性Rspec FactoryGirl,ruby-on-rails,rspec,devise,factory-bot,Ruby On Rails,Rspec,Devise,Factory Bot,我甚至一直在尝试等待这个,但它仍然给出错误 用户工厂 FactoryGirl.define do sequence :email do |n| "email#{n}@evercam.io" end factory :user, class: :EvercamUser do sequence(:firstname) { |n| "firstname#{n}" } sequence(:lastname) { |n| "lastname#{n}" }

我甚至一直在尝试等待这个,但它仍然给出错误

用户工厂

FactoryGirl.define do
    sequence :email do |n|
        "email#{n}@evercam.io"
    end
  factory :user, class: :EvercamUser do
    sequence(:firstname) { |n| "firstname#{n}" }
    sequence(:lastname) { |n| "lastname#{n}" }
    sequence(:username) { |n| "username#{n}" }
    sequence(:password) { |n| "password#{n}" }
    email
    sequence(:api_id) {|n| SecureRandom.hex(10)}
    sequence(:api_key) {|n| SecureRandom.hex(16)}
    # is_admin false
    country do
        country = Country.where(iso3166_a2: 'ie').first
        country || create(:ireland)
    end
  end
end
用户规范

require 'rails_helper'

RSpec.describe User, type: :model do
  describe 'validations' do
    it { should validate_presence_of :email }
    it { should validate_presence_of :firstname }
    it { should validate_presence_of :lastname }
    it { should validate_presence_of :username }
    it { should validate_presence_of :encrypted_password }
    describe 'email uniqueness' do
      before { create :user, email: 'foo@bar.com' }
      let(:user) { build :user, email: 'foo@bar.com' }
      it do
        user.valid?
        expect(user.errors[:email]).to be == ['has already been taken']
      end
    end
  end

  describe 'associations' do
    it { should belong_to(:country) }
    # it { should have_many(:camera_shares) }
  end

  it 'has a valid factory' do
    expect(build(:user)).to be_valid
  end
end
这是我的用户模型,它是
design

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  belongs_to :country

  validates :firstname, presence: true
  validates :lastname, presence: true
  validates :username, presence: true
  validates :encrypted_password, presence: true

  def fullname
    "#{firstname} #{lastname}"
  end

  def self.created_months_ago(number)
    given_date = number.months.ago
    User.where(created_at: given_date.beginning_of_month..given_date.end_of_month)
  end
end
class用户
我甚至试着给所有的块加上“
pending
”,但它仍然给了我一个错误,我不知道我在这个问题上哪里错了

任何帮助都将不胜感激,谢谢

it { should validate_presence_of :email }
如果在上面一行失败,那是因为该模型实际上没有对
:email
进行验证:

validates :firstname, presence: true
validates :lastname, presence: true
validates :username, presence: true
validates :encrypted_password, presence: true
# validates :email, presence: true # <---- missing in action
验证:firstname,状态:true
验证:lastname,状态:true
验证:用户名,状态:true
验证:加密密码,状态:true

#验证:email,presence:true#在您的规范中的哪一点出现错误?您不能使用shoulda matchers提供的helper的validate_university_吗?如果您能详细说明“错误”,那么尝试过的错误和相同的错误会很有帮助。i、 e.这是验证错误,还是在rspec中运行时引发的错误异常?如果这是验证错误,请显示完整的错误消息。如果这是一个例外情况,请显示回溯错误消息以及应用程序的相关代码行。