[英]Rspec error, “undefined method 'downcase' for nil:NilClass”
[英]Error “undefined method `<' for nil:NilClass” when testing a model with RSpec.
我正在学习RSpec并测试以下情况:
require 'rails_helper'
RSpec.describe Student, type: :model do
before(:each) do
Student.delete_all
end
it "roll number can't be less than 0 or more than 80" do
s = Student.create(:name => "sanjay" , :lastname => "test" , :roll => 0)
s1 = Student.create(:name => "sanjay" , :lastname => "test" , :roll => 81)
expect(s).not_to be_valid
expect(s1).not_to be_valid
end
end
以下是学生模型定义:
class Student < ActiveRecord::Base
validates_presence_of :name
validates_uniqueness_of :roll
validate :number_of_valid_students
def number_of_valid_students
if (self.roll < 1) or (self.roll > 80)
self.errors.add(:rollnumber , "Can't be less than 0 or greater than 80")
end
end
end
运行命令rake spec:models
,出现以下错误:
Failure/Error: expect(student).not_to be_valid
NoMethodError:
undefined method `<' for nil:NilClass
请帮忙。 谢谢。
您无需添加自定义验证。 考虑使用ActiveRecord提供的数字验证 :
class Student < ActiveRecord::Base
validates :name, presence: true
validates :roll, uniqueness: true
validates :roll, numericality: { greater_than: 1, less_than: 80 }
end
同样以这种方式编写测试:
let(:student1) { Student.create(name: "sanjay", lastname: "test", roll: 0) }
let(:student2) { Student.create(name: "sanjay", lastname: "test", roll: 81) }
it "roll number can't be less than 0 or more than 80" do
expect(student1).not_to be_valid
expect(student2).not_to be_valid
end
查看有关RSpec最佳实践的更好规范 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.