在我的 Rails 3 应用程序中,我有一个 RSpec 规范,它检查给定字段(用户模型中的角色)的行为,以保证该值在有效值列表中。
现在我将在另一个具有另一组有效值的模型中为另一个字段提供完全相同的规范。我想提取公共代码,而不是仅仅复制和粘贴它,更改变量。
我想知道是否会使用共享示例或其他 RSpec 重用技术。
这是相关的 RSpec 代码:
describe "validation" do
describe "#role" do
context "with a valid role value" do
it "is valid" do
User::ROLES.each do |role|
build(:user, :role => role).should be_valid
end
end
end
context "with an empty role" do
subject { build(:user, :role => nil) }
it "is invalid" do
subject.should_not be_valid
end
it "adds an error message for the role" do
subject.save.should be_false
subject.errors.messages[:role].first.should == "can't be blank"
end
end
context "with an invalid role value" do
subject { build(:user, :role => 'unknown') }
it "is invalid" do
subject.should_not be_valid
end
it "adds an error message for the role" do
subject.save.should be_false
subject.errors.messages[:role].first.should =~ /unknown isn't a valid role/
end
end
end
end
重用此代码的最佳情况是什么,但将角色(正在验证的字段)和User::ROLES(有效值的集合)提取到传递给此代码的参数中?