Wie verwende ich @valid_attributes in einem Vorher-Block in Rails 3 und rspec?
-
27-10-2019 - |
Frage
Ich probiere verschiedene Blogs mit Beispielen für Rails 3 und RSpec aus.Ja, es ist unter Windows, daher wird Windows nicht verwendet.Keine Wahl.Weitermachen ...
Ich kann die Spezifikation entweder mit rspec spec oder rake spec: models ausführen, sodass dies in Ordnung zu sein scheint.Wenn ich jedoch versuche, einen Vorher-Block mit Attributen zu verwenden, schlägt dies beim Erstellen einer Personenklasse mit diesen Attributen fehl.Die anderen Tests sind nur da, um zu zeigen, dass die Spezifikation ausgeführt werden kann.
Ein Personenmodell erstellt und dann die Spezifikation aktualisiert
\ myapp \ spec \ models \ person_spec.rb
require 'spec_helper'
describe Person do
before(:each) do
@valid_attributes = {
:first_name => "Foo",
:last_name => "Bar"
}
end
it "should create a new instance given valid attributes" do
Person.create!(@valid_attributes)
end
it "can be instantiated" do
Person.new.should be_an_instance_of(Person)
end
it "can be saved successfully" do
Person.create.should be_persisted
end
#pending "add some examples to (or delete) #{__FILE__}"
end
Hier ist die Ausgabe des Befehls rake spec: models
C:\Users\laptop\Documents\Sites\myapp>rake spec:models
C:/Ruby193/bin/ruby.exe -S rspec ./spec/models/person_spec.rb
Person
←[31m should create a new instance given valid attributes (FAILED - 1)←[0m
←[32m can be instantiated←[0m
←[32m can be saved successfully←[0m
Failures:
1) Person should create a new instance given valid attributes
←[31mFailure/Error:←[0m ←[31mPerson.create!(@valid_attributes)←[0m
←[31mActiveRecord::UnknownAttributeError:←[0m
←[31munknown attribute: first_name←[0m
←[36m # ./spec/models/person_spec.rb:13:in `block (2 levels) in <top (required)>'←[0m
Finished in 0.074 seconds
←[31m3 examples, 1 failure←[0m
Failed examples:
←[31mrspec ./spec/models/person_spec.rb:12←[0m ←[36m# Person should create a new instance given valid attributes←[0m
rake aborted!
C:/Ruby193/bin/ruby.exe -S rspec ./spec/models/person_spec.rb failed
Also haben zwei von drei bestanden, nur nicht der mit Attributen.
Gibt es etwas Besonderes, das eingerichtet werden müsste, damit ein Vorher-Block ausgeführt werden kann, oder wie werden Attribute in einem Test mit Rails 3 übergeben?
Gibt es auch eine Möglichkeit, diese 31 m und solche Ausdrucke für jede Spezifikationszeile loszuwerden?
Danke
Lösung 2
Ich sollte dies mit der Antwort aktualisieren.
Das Personenmodell enthielt tatsächlich Vorname und Nachname, aber wie von zwei Personen über dem Fehler, den ich erhielt, festgestellt wurde, wies ActiveRecord darauf hin, dass es nicht gefunden wurde.
Unter Windows wurde Rake db: migr zwei- oder dreimal ausgeführt, um das Problem zu beheben, obwohl es im Modell nicht fehlte.
Wenn Sie mit Windows dev nicht weiterkommen, ist dies möglicherweise eine gute Sache!
Ich konnte Lubuntu endlich auf eine VirtualBox unter Windows 7 setzen und es lief einwandfrei und seitdem habe ich mit anderen Beispielen von dort fortgefahren.
Prost
Andere Tipps
Aus dem Fehler geht hervor, dass ActiveRecord das Attribut: Vorname, das Sie als Teil von @valid_attributes übergeben, nicht finden kann.Das Problem liegt also nicht darin, wie Sie RSpec verwenden, sondern in den Attributen, die ein gültiges Modell enthalten soll.
Überprüfen Sie, ob das Personenmodell ein Feld oder ein Attribut: first_name enthält, und überprüfen Sie die genaue Schreibweise (: first_name vs: firstname oder eine andere Variante)