【发布时间】:2020-07-25 04:11:35
【问题描述】:
Rspec
it "should lastname" do
valid_params[:lastname] = nil
user = User.new(valid_params)
expect(user).to_not be_valid
end
it "should have username" do
valid_params[:username] = nil
user = User.new(valid_params)
expect(user).to_not be_valid
end
迁移文件
create_table :users do |t|
## Database authenticatable
t.string :email, null: false, default: ""
t.string :encrypted_password, null: false, default: ""
t.string :firstname, null: false, default: ""
t.string :lastname, null: false, default: ""
t.string :username, null: false, default: ""
t.boolean :admin, default: false
型号 除了设计验证,我没有任何验证
class User < ApplicationRecord
after_initialize :set_initial_password
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
private
def set_initial_password
if !self.firstname.nil? && !self.lastname.nil?
self.password = self.firstname.downcase + self.lastname.downcase
end
end
end
错误
1) User should have username
Failure/Error: expect(user).to_not be_valid
expected #<User id: nil, email: "wynell_daniel@schiller.co", firstname: "Garfield", lastname: "Koepp", username: nil, admin: false, created_at: nil, updated_at: nil> not to be valid
Rspec 测试确实通过了姓氏,但没有通过用户名,即使它们具有相同的条件。
【问题讨论】:
-
可能是因为您没有验证。请发布您的型号代码
-
@jamesc 我没有任何验证,但如果是这样,那么姓氏也不会通过?
-
您需要验证不应该为 nil 的字段的存在调用。你没有显示你的测试失败结果,所以我不知道失败的原因
-
我已经给了你一个答案,希望能得到一个解释,让你更清楚。您应该查看模型返回的验证错误以查看更多信息
标签: ruby-on-rails rspec rspec-rails