2009-12-29 22 views
20

Also, ich versuche, das RSPEC BDD-Test-Framework im Rahmen eines Rails-Projekts zu lernen. Das Problem, das ich habe, ist, dass ich für mein Leben nicht dazu in der Lage bin, meine Fixtures in rspec-Beschreibungen richtig zu laden.Rails Fixtures laden nicht mit rspec

Haftungsausschluss: Ja, es gibt bessere Dinge als Vorrichtungen zu verwenden. Ich versuche, eine Sache zu einer Zeit zu lernen, hier (speziell rspec), bevor ich mit assoziierten Werkzeugen wie Fabrik-Mädchen, Mokka, Auto-Test, usw. spiele. Als solche versuche ich, die Toten einfach zu bekommen , wenn klobig, Geräte arbeiten.

Wie auch immer, hier ist der Code:

/test/fixtures/users.yml -

# password: "secret" 
foo: 
    username: foo 
    email: [email protected] 
    password_hash: 3488f5f7efecab14b91eb96169e5e1ee518a569f 
    password_salt: bef65e058905c379436d80d1a32e7374b139e7b0 

bar: 
    username: bar 
    email: [email protected] 
    password_hash: 3488f5f7efecab14b91eb96169e5e1ee518a569f 
    password_salt: bef65e058905c379436d80d1a32e7374b139e7b0 

/spec/controllers/pages_controller_spec.rb -

require 'spec/spec_helper' 

describe PagesController do 
    integrate_views 
    fixtures :users 
    it "should render index template on index call when logged in" do 
    session[:user_id] = user(:foo).id 
    get 'index' 
    response.should render_template('index') 
    end 
end 

Und was ich Ich bekomme, wenn ich 'Rake spec' laufen lasse:

NoMethodError in 'PagesController should render index template on index call when logged in' 
undefined method `user' for #<Spec::Rails::Example::ControllerExampleGroup::Subclass_1:0x2405a7c> 
/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, da ich, wenn ich sie über 'rake db: fixtures: load' in die Entwicklungs-DB lade, verifizieren kann, dass foo und bar in dieser db vorhanden sind.

Ich fühle mich, als würde ich hier etwas Offensichtliches vermissen, aber ich habe mir den ganzen Tag die Haare ausgerissen, ohne Erfolg. Jede Hilfe wäre willkommen.

Antwort

32

Wenn Sie Leuchten als ‚Nutzer‘ definieren, dann ist der Weg, sie ist mit dem gleichen Namen über die Methode zu verwenden:

describe PagesController do 
    integrate_views 
    fixtures :users 
    it "should render index template on index call when logged in" do 
    session[:user_id] = users(:foo).id 
    get 'index' 
    response.should render_template('index') 
    end 
end 

Der Singular nur relevant für die Klasse selbst (Benutzer). Hoffe, du hast noch ein paar Haare übrig, wenn das nur ein Ein-Buchstaben-Bug ist.

+1

Damnit. Nun, ich war mir sicher, dass es so dumm war und ich hatte verdammt recht. Danke, das hat es gelöst. :) – Fishtoaster

+0

@tadman Bist du online? –

7

Wenn Sie Ihre Armaturen wollen global einzurichten, in Ihrem spec_helper oder rails_helper Sie hinzufügen können:

RSpec.configure do |config| 
    config.global_fixtures = :all 
end 
Verwandte Themen