Я тестирую для создания аутентификации пользователей с нуля.Rspec 3: проверка проверки регулярных выражений регулярных выражений
Я начал с тестирования и настройки валидации, и все они прошли. Как только я добавил метод format: { with: ... }
, мой набор тестов сломался.
Вот неудача вместе с кодом:
Failures:
1) User validations requires an email
Failure/Error: expect(user).to validate_presence_of(:email)
NoMethodError:
undefined method `validate_presence_of' for #<RSpec::ExampleGroups::User::Validations:0x007fae7f5551b0>
# ./spec/models/user_spec.rb:14:in `block (3 levels) in <top (required)>'
2) User validations requires a unique email
Failure/Error: expect(user).to validate_uniqueness_of(:email)
NoMethodError:
undefined method `validate_uniqueness_of' for #<RSpec::ExampleGroups::User::Validations:0x007fae83193b90>
# ./spec/models/user_spec.rb:18:in `block (3 levels) in <top (required)>'
3) User validations requires a unique email (case insensitive)
Failure/Error: expect(user).to validate_uniqueness_of(:email)
NoMethodError:
undefined method `validate_uniqueness_of' for #<RSpec::ExampleGroups::User::Validations:0x007fae83168670>
# ./spec/models/user_spec.rb:23:in `block (3 levels) in <top (required)>'
Finished in 0.04888 seconds (files took 1.2 seconds to load)
6 examples, 3 failures
спецификации/модели/user_spec.rb
require 'rails_helper'
RSpec.describe User, :type => :model do
let(:valid_attr) { attributes_for(:user) }
context "validations" do
let(:user) { User.new(valid_attr) }
before do
User.create(valid_attr)
end
it "requires an email" do
expect(user).to validate_presence_of(:email)
end
it "requires a unique email" do
expect(user).to validate_uniqueness_of(:email)
end
it "requires a unique email (case insensitive)" do
user.email = "[email protected]"
expect(user).to validate_uniqueness_of(:email)
end
it "requires the email to look like an email" do
user.email = "brown"
expect(user).to_not be_valid
end
end
describe "#downcase_email" do
it "makes the email attribute lowercase" do
user = User.new(valid_attr.merge(email: "[email protected]"))
expect{ user.downcase_email }.to change{ user.email }.
from("[email protected]").
to("[email protected]")
end
it "downcases an email before saving" do
user = build(:user)
user.email = "[email protected]"
expect(user.save).to be true
expect(user.email).to eq("[email protected]")
end
end
end
завод Девочкаusers.rb
FactoryGirl.define do
factory :user do
first_name "Charlie"
last_name "Brown"
email "[email protected]"
password "charbar1234"
password_confirmation "charbar1234"
end
end
модели/user.rb
class User < ActiveRecord::Base
has_secure_password
validates :email, presence: true,
uniqueness: true,
format: {
with: /\A[A-Za-z0-9._%+-][email protected][A-Za-z0-9\.-]+\.[A-Za-z]+\Z/
}
before_save :downcase_email
def downcase_email
self.email = email.downcase
end
end