gpt4 book ai didi

ruby-on-rails - 首先 RSPEC 测试,确保值为 1 或 -1

转载 作者:数据小太阳 更新时间:2023-10-29 07:06:05 25 4
gpt4 key购买 nike

这里是新程序员。我是一名学生,正在研究我的项目,该项目是 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.

  1. Create VoteSpec:

spec/models/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

关于ruby-on-rails - 首先 RSPEC 测试,确保值为 1 或 -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30281270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com