gpt4 book ai didi

unit-testing - 使用 Rails 固定装置进行单元测试

转载 作者:行者123 更新时间:2023-12-04 06:13:53 24 4
gpt4 key购买 nike

抱歉我的问题标题含糊不清,但我很难将我所问的内容提炼成单行...

我有几个通过 rails g scaffold 生成的简单 Rails (3.1) 模型,我正在尝试对其进行单元测试。它们的定义方式如下:

class ModelA < ActiveRecord::Base
validates_presence_of :field1, :field2
validates_uniqueness_of :field1
end

class ModelB < ActiveRecord::Base
validates_presence_of :field1
validates_uniqueness_of :field1
end

我为每个模型都有几个固定装置,即:
model_a_no_field1:
field2: test

model_a_no_field2:
field1: test

model_a_ok:
field1: test
field2: test


model_b_no_field1:

model_b_ok:
field1: test

我的单元测试正在测试这些验证:
class ModelATest < ActiveSupport::TestCase
test "field1 should be present" do
assert !model_as(:model_a_no_field1).valid?
end

test "field2 should be present" do
assert !model_as(:model_a_no_field2).valid?
end

test "field1 should be unique" do
model_a = model_as(:model_a_ok)
model_a.save

assert !model_as(:model_a_ok).valid?
end
end

这些测试都正确通过。但是,我对 ModelB 的类似单元测试:
class ModelBTest < ActiveSupport::TestCase
test "field1 should be present" do
assert !model_bs(:model_b_no_field1).valid?
end

test "field1 should be unique" do
model_b = model_bs(:model_b_ok)
model_b.save

assert !model_bs(:model_b_ok).valid?
end
end

第二次测试失败(测试唯一性)。

我几乎可以肯定这与 model_b_no_field1 的空 YAML 固定装置有关。 ,但我不确定。我可以通过将测试方法主体替换为
test "field1 should be unique" do
model_b = model_bs(:model_b_ok)
model_b.save

model_b2 = ModelB.new

assert !model_b2.valid?
end

这很好,但我想了解这里发生了什么。

最佳答案

我认为您正在颠覆 rails 为您创建的测试基础架构。您在 yaml 文件中拥有的模型应该是有效的,如果您想测试一些无效的东西,请在测试中创建它。

在测试中创建数据具有非常清晰和具体的额外值(value)。否则,开发人员需要打开 yaml 文件以了解您拥有哪些数据以及缺少哪些数据。

关于unit-testing - 使用 Rails 固定装置进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7488617/

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