【发布时间】:2015-05-18 11:14:01
【问题描述】:
我正在学习 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
请帮忙。 谢谢。
【问题讨论】:
-
但在我的测试用例中,我提供的滚动值为 1 和 80。那么 student.roll 怎么会为零
-
1.使用数值验证。 2. 不要在你使用的地方使用
self- 这是多余的。 3. 您正在检查roll,但将错误添加到rollnumber。 4. 不要使用or而||-or是用于控制流,而不是用于定义条件
标签: ruby-on-rails ruby-on-rails-4 rspec rspec3