作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
所以在我为我的 RoR 模型不断发展的 rspecs 中,我最终得到了两个完全相同的测试:
it 'is valid when x is zero' do
foo = build(:foo, x: 0, y: 10)
expect(foo.valid?).to be_truthy
end
it 'is valid when y is ten' do
foo = build(:foo, x: 0, y: 10)
expect(foo.valid?).to be_truthy
end
这是因为我首先编写了验证 x 的规范,然后添加了 y 的规范。
显然,是时候重构了。我可以删除其中一个规范,因为它们是重复的:保持干燥。
现在,每个规范的内部结构可能完全相同,但it
描述不同。我不想丢失其中包含的信息。
我的问题是 - 在这种情况下,保持重复的规范完整是否可以接受,或者我应该“合并”它们并改写 it
描述?也许:
it 'is valid when x is zero and y is ten' do
foo = build(:foo, x: 0, y: 10)
expect(foo.valid?).to be_truthy
end
但在我看来,我现在有一个规范正在测试两件事(Foo 模型中的两个验证子句)。那也不好。有一股气味潜伏。
还有我错过的另一种方法吗?
最佳答案
我不太担心 DRY,而更担心编写实际涵盖您想要的行为的规范。
it 'is valid when x is zero' do
foo = build(:foo, x: 0)
expect(foo.valid?).to be_truthy
end
这个例子实际上根本没有涵盖你的验证!如果您在模型中注释掉验证,它仍然会通过。
测试模型验证时的一些提示:
.new
和被测属性进行初始化即可。RSpec.describe Foo do
describe "validations" do
describe 'x' do
it "validates that x is a number between 1 and 10" do
expect(Foo.new(500).valid?.errors[:x]).to include "must be less than or equal to 10".
expect(Foo.new(10).valid?.errors).to_not have_key :x
end
end
describe 'y' do
it "validates that y is a number that is less than 15" do
expect(Foo.new(500).valid?.errors[:y]).to include "must be less than 15".
expect(Foo.new(10).valid?.errors).to_not have_key :y
end
end
end
end
关于ruby-on-rails - 保持干燥,但由于不同原因想要重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40047683/
使用登录后,我想吐出用户名。 但是,当我尝试单击登录按钮时, 它给了我力量。 我看着logcat,但是什么也没显示。 这种编码是在说。 它将根据我在登录屏幕中输入的名称来烘烤用户名。 不会有任何密码。
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎是题外话,因为它缺乏足够的信息来诊断问题。 更详细地描述您的问题或include a min
我是一名优秀的程序员,十分优秀!