新程序员在这里.我是一名正在研究Reddit克隆项目的学生.目前我已被介绍给RSPEC.我必须开始编写自己的模型测试以用于进一步的练习.有问题的模型没有创建,它将在下一个任务中.有人可以检查我是否正确完成了这项工作?
In the next checkpoint,we’ll add a Vote model. This model will
feature an inclusion validation. Inclusion validation ensures that a
vote’s value attribute is either 1 or -1. If a vote is initialized
with any other value,it will not save.
- Create VoteSpec:
规格/型号/ vote_spec.rb
describe Vote do describe "validations" do describe "value validation" do it "only allows -1 or 1 as values" do # your expectations here end end end end
Write a spec that asserts the validations work as expected.
Use RSpec’s expect().to eq() Syntax. As you may recall from the specs in
the Ruby exercises,you can assert that something should equal false
or true.You won’t be able to run the tests because we haven’t
generated the model we’re testing.
以下是我的实施:
describe Vote do describe "validations" do before do 2.times { @vote.create(value: 1) } 3.times { @vote.create(value: -1) } 2.times { @vote.create(value: 3) } end describe "value validation" do it "only allows -1 or 1 as values" do expect ( @vote.value ).to eq(-1) end it "only allows -1 or 1 as values" do expect ( @vote.value ).to eq(1) end end end end
最好的祝福.
编辑:这是一个修订版:
describe Vote do describe "validations" do before do 2.times { Vote.create(value: 1) } 3.times { Vote.create(value: 0) } 2.times { Vote.create(value: 3) } end describe "value validation" do it "only allows -1 as value" do expect ( @vote.value ).to eq(-1) end it "only allows 1 as value" do expect ( @vote.value ).to eq(1) end it "it prohibits other values" do expect( @vote.value ).to_not be_valid end end end end
我也试过这个代码,它起初工作但现在在下一个任务中失败了:
require 'rails_helper' describe Vote do describe "value validation" do it "allows -1" do value = Vote.create(value: -1) expect(value).to be_valid end it "allows +1" do value = Vote.create(value: +1) expect(value).to be_valid end it "prohibits other values" do value = Vote.create(value: 0) expect(value).to_not be_valid end end end ▶ rspec spec ...FFF Failures: 1) Vote value validation allows -1 Failure/Error: value = Vote.create(value: -1) NoMethodError: undefined method `update_rank' for nil:NilClass # ./app/models/vote.rb:12:in `update_post' # ./spec/models/vote_spec.rb:7:in `block (3 levels) in <top (required)>' 2) Vote value validation allows +1 Failure/Error: value = Vote.create(value: +1) NoMethodError: undefined method `update_rank' for nil:NilClass # ./app/models/vote.rb:12:in `update_post' # ./spec/models/vote_spec.rb:12:in `block (3 levels) in <top (required)>' 3) Vote value validation prohibits other values Failure/Error: expect(value).to eq(false) expected: false got: #<Vote id: nil,value: 0,user_id: nil,post_id: nil,created_at: nil,updated_at: nil> (compared using ==) # ./spec/models/vote_spec.rb:18:in `block (3 levels) in <top (required)>' Finished in 0.30485 seconds (files took 3.28 seconds to load) 6 examples,3 failures Failed examples: rspec ./spec/models/vote_spec.rb:6 # Vote value validation allows -1 rspec ./spec/models/vote_spec.rb:11 # Vote value validation allows +1 rspec ./spec/models/vote_spec.rb:16 # Vote value validation prohibits other values
解决方法
在这个稍微特殊的情况下,您可以使用绝对值.
it "only allows -1 or 1 as values" do expect ( @vote.value.abs ).to eq(1) end