In meiner Rails 3-Anwendung, habe ich ein RSpec spec, das Verhalten eines bestimmten Feldes (Rolle im Benutzer Modell) zu gewährleisten, überprüft, ob der Wert innerhalb einer Liste der gültigen Werte ist.Reusing RSpec Verhalten Validierung
Jetzt werde ich genau die gleiche Spezifikation für ein anderes Feld haben, in einem anderen Modell mit einem anderen Satz gültiger Werte. Ich möchte den gemeinsamen Code extrahieren, anstatt ihn lediglich zu kopieren und einzufügen, indem ich die Variablen ändere.
Ich frage mich, ob dies der Fall wäre, ein geteiltes Beispiel oder andere RSpec Wiederverwendungstechnik zu verwenden.
Hier ist der relevante RSpec Code:
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
Was wäre der beste Fall sein, diesen Code wiederverwenden, aber Rolle (das Feld überprüft wird) und User :: ROLES (die Sammlung von Extrahieren gültige Werte) in Parameter, die an diesen Code übergeben werden?
Erstaunlich, danke. – kolrie