Also, ich versuche, das rspec BDD-Testframework im Rahmen eines Rails-Projekts zu lernen. Das Problem, das ich habe, ist, dass ich meine Fixtures einfach nicht dazu bringen kann, richtig in rspec-Beschreibungen geladen zu werden.
Haftungsausschluss: Ja, es gibt bessere Dinge als Fixtures zu benutzen. Ich versuche hier (speziell rspec) eine Sache nach der anderen zu lernen, bevor ich mit anderen Tools wie factory-girl, mocha, auto-test usw. spiele. Deshalb versuche ich, die einfachen, wenn auch umständlichen, Fixtures zum Laufen zu bringen.
Wie auch immer, hier ist der Code:
/test/fixtures/users.yml -
# password: "geheim"
foo:
benutzername: foo
email: foo@example.com
passwort-hash: 3488f5f7efecab14b91eb96169e5e1ee518a569f
passwort-salz: bef65e058905c379436d80d1a32e7374b139e7b0
bar:
benutzername: bar
email: bar@example.com
passwort-hash: 3488f5f7efecab14b91eb96169e5e1ee518a569f
passwort-salz: bef65e058905c379436d80d1a32e7374b139e7b0
/spec/controllers/pages_controller_spec.rb -
require 'spec/spec_helper'
describe PagesController do
integrate_views
fixtures :users
it "soll beim Aufruf von index beim eingeloggt sein das Index-Template rendern" do
session[:user_id] = user(:foo).id
get 'index'
response.should render_template('index')
end
end
Und was ich bekomme, wenn ich 'rake spec' ausführe ist:
NoMethodError in 'PagesController sollte das Index-Template beim Aufrufen des Index beim eingeloggt sein darstellen'
undefined method `user' for #
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.5/lib/action_controller/test_process.rb:511:in `method_missing'
./spec/controllers/pages_controller_spec.rb:7:
Das heißt, 'user(:foo)' wird nicht als gültige Methode erkannt.
Die Fixtures selbst müssen in Ordnung sein, denn wenn ich sie in die Entwicklungsdatenbank lade über 'rake db:fixtures:load', kann ich überprüfen, dass foo und bar in dieser Datenbank vorhanden sind.
Ich habe das Gefühl, dass ich hier etwas Offensichtliches übersehe, aber ich habe den ganzen Tag damit verbracht, erfolglos an meinen Haaren zu ziehen. Jede Hilfe wäre willkommen.