繁体   English   中英

使用RSpec测试模型时,错误“ 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM