我最近开始学习RoR和TDD,并且无法找到处理这种情况的最佳方法。
我有一个ActiveRecord模型,它有两个共享相同验证的字段。
如何编写RSpec测试,该测试对相似的字段使用相同的测试?
“共享示例”在这种情况下看起来像是一个很有前途的功能,但似乎不起作用,因为我需要测试整个模型,但我只是将单个字段传递给共享示例。
以下是我失败的尝试:
describe Trip do
before do
@trip = trip.new(date: '2013-07-01', city_1: "PORTLAND",
city_2: "BOSTON")
end
subject { @trip }
shared_examples "a city" do
describe "when not uppercase" do
before { city = city.downcase }
it { should_not be_valid }
end
end
describe "city_1 must be valid" do
it_should_behave_like "a city" do
let!(:city) { @trip.city_1}
end
end
describe "city_2 must be valid" do
it_behaves_like "a city" do
let!(:city) { @trip.city_2}
end
end
end
此操作失败,因为更新城市变量不会更新行程模型。有没有办法动态地将它与模型联系起来?
顺便说一句,如果我粘贴在每个字段下,所有测试都可以自行运行。它只是在shared_example的上下文中不起作用。非常感谢任何指导。
答案 0 :(得分:0)
你可以在循环中执行断言,并使用一点元编程,但我会反对它。测试应该尽可能简单明了,即使这意味着重复一点。如果只涉及两个字段,请重复它。