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

时间:2016-01-14 07:50:47

标签: ruby-on-rails rspec devise factory-bot

我甚至一直试图等待这个,但它仍然给出了错误。

Userfactory

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

UserSpec

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

这是我的UserModel,Devise

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

我甚至试图给所有街区“pending”,但它仍然给我错误我不知道我错在哪里

感谢任何帮助

1 个答案:

答案 0 :(得分:0)

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
相关问题