Har*_*M V 0 rspec ruby-on-rails devise ruby-on-rails-4
我正在尝试测试用户创建的用户模型规范
工厂/ users.rb的
FactoryGirl.define do
factory :user do
first_name {Faker::Name.first_name}
last_name {Faker::Name.last_name}
email {Faker::Internet.email}
username {Faker::Internet.user_name}
password {Faker::Internet.password}
end
end
Run Code Online (Sandbox Code Playgroud)
规格/型号/ user_spec.rb
require 'rails_helper'
describe User, :type => :model do
context "valid Factory" do
it "has a valid factory" do
expect(build(:user)).to be_valid
end
end
context "validations" do
before { create(:user) }
context "presence" do
it { should validate_presence_of :first_name }
it { should validate_presence_of :last_name }
it { should validate_presence_of :email }
it { should validate_presence_of :encrypted_password }
end
context "uniqueness" do
it { should validate_uniqueness_of :email }
it { should validate_uniqueness_of :username }
end
end
end
Run Code Online (Sandbox Code Playgroud)
我正在使用Devise来创建USer.但我最终会遇到以下测试失败
User
valid Factory
has a valid factory
validations
presence
should require first_name to be set
should require last_name to be set
should require email to be set
should require encrypted_password to be set (FAILED - 1)
uniqueness
should require case sensitive unique value for email
should require case sensitive unique value for username
Failures:
1) User validations presence should require encrypted_password to be set
Failure/Error: it { should validate_presence_of :encrypted_password }
Expected errors to include "can't be blank" when encrypted_password is set to nil,
got no errors
# ./spec/models/user_spec.rb:18:in `block (4 levels) in <top (required)>'
Finished in 0.98827 seconds (files took 6.61 seconds to load)
7 examples, 1 failure
Failed examples:
rspec ./spec/models/user_spec.rb:18 # User validations presence should require encrypted_password to be set
Run Code Online (Sandbox Code Playgroud)
我假设encrypted_passwordDevise会在尝试创建用户时自动生成.
Devise实际上并不验证加密密码,因为如果密码是"脏"(已更改),它将在验证后动态创建.
您实际上不需要以这种方式测试加密密码,因为它是一个实现细节.您可以通过执行以下操作来测试Database authenticable是否正常工作:
it 'is database authenticable' do
user = User.create(
email: 'test@example.com',
password: 'password123',
password_confirmation: 'password123'
)
expect(user.valid_password?('password123')).to be_truthy
end
Run Code Online (Sandbox Code Playgroud)
但是测试的实际价值非常低.与Devise相反,您可能希望专注于一些端到端测试(功能规范),您可以在其中测试注册的用户路径,然后登录.
| 归档时间: |
|
| 查看次数: |
3888 次 |
| 最近记录: |