Activerecord RSpec和活动记录验证

Activerecord RSpec和活动记录验证,activerecord,rspec-rails,Activerecord,Rspec Rails,我试图验证一部电影的评级是否大于0且小于或等于5,为此,我在RSpec中使用了“be_valid”,当我检查电影标题是否为零时,它似乎起作用,但对评级不起作用 我不明白为什么 型号: class Movie < ApplicationRecord validates :title, presence: true validates :rating, presence: true, numericality: { greater_than_or_equal_to: 0,less_th

我试图验证一部电影的评级是否大于0且小于或等于5,为此,我在RSpec中使用了“be_valid”,当我检查电影标题是否为零时,它似乎起作用,但对评级不起作用

我不明白为什么

型号:

class Movie < ApplicationRecord
  validates :title, presence: true
  validates :rating, presence: true, numericality: { greater_than_or_equal_to: 0,less_than_or_equal_to: 5,  only_integer: true }
end
错误:

Movie
  title must be present
  rating must be greater than 0 (FAILED - 1)
  rating must be less than or equal to 5 (FAILED - 2)

Failures:

  1) Movie rating must be greater than 0
     Failure/Error: expect(subject.rating).to be_valid
     
     NoMethodError:
       undefined method `valid?' for 1:Integer
     # ./spec/models/movie_spec.rb:15:in `block (2 levels) in <top (required)>'

  2) Movie rating must be less than or equal to 5
     Failure/Error: expect(rating).to be_valid
     
     NameError:
       undefined local variable or method `rating' for #<RSpec::ExampleGroups::Movie:0x00007f8332f46fc0>
     # ./spec/models/movie_spec.rb:20:in `block (2 levels) in <top (required)>'
电影
标题必须存在
评级必须大于0(失败-1)
额定值必须小于或等于5(失败-2)
失败:
1) 电影分级必须大于0
失败/错误:预期(受试者评级)。有效
命名错误:
1:整数的未定义方法“valid”
#./spec/models/movie_spec.rb:15:in'block(2层)in'
2) 电影分级必须小于或等于5
失败/错误:预期(评级)。有效
名称错误:
未定义的局部变量或方法“评级”#
#./spec/models/movie_spec.rb:20:in'block(2层)in'

您应该使用
expect(subject.)。在其他两个测试用例中有效。您得到错误是因为您试图验证
subject.rating
这是一个整数。

您应该使用
expect(subject.),以便在其他两个测试用例中有效。您得到错误是因为您试图验证
subject.rating
这是一个整数

Movie
  title must be present
  rating must be greater than 0 (FAILED - 1)
  rating must be less than or equal to 5 (FAILED - 2)

Failures:

  1) Movie rating must be greater than 0
     Failure/Error: expect(subject.rating).to be_valid
     
     NoMethodError:
       undefined method `valid?' for 1:Integer
     # ./spec/models/movie_spec.rb:15:in `block (2 levels) in <top (required)>'

  2) Movie rating must be less than or equal to 5
     Failure/Error: expect(rating).to be_valid
     
     NameError:
       undefined local variable or method `rating' for #<RSpec::ExampleGroups::Movie:0x00007f8332f46fc0>
     # ./spec/models/movie_spec.rb:20:in `block (2 levels) in <top (required)>'