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中运行时引发的错误异常?如果这是验证错误,请显示完整的错误消息。如果这是一个例外情况,请显示回溯错误消息以及应用程序的相关代码行。