Я учусь RSpec и тестирование ниже сценарий:Ошибка "undefined method` <'for nil: NilClass "при тестировании модели с 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
ниже определение Student модель:
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
Пожалуйста, помогите. Спасибо.
, но в моем тестовом примере я предоставляю значение рулона как 1 и 80. то как же студент.ролл приходит ноль –
1. используйте проверку числовой валидации. 2. Не используйте 'self', где вы делаете - это избыточно. 3. Вы проверяете 'roll', но добавляете ошибки в' rollnumber'. 4. Не используйте 'или', но '' '' '' 'или' скорее для потока управления, а не для определения условий –