2009-12-29 28 views
20

Quindi, sto cercando di imparare il framework di test BDD rspec nel contesto di un progetto di rotaie. Il problema che sto avendo è che non posso, per la vita di me, far caricare i miei proiettori correttamente nelle descrizioni di rspec.Rails Fixtures non caricati con rspec

Disclaimer: Sì, ci sono cose migliori degli apparecchi da usare. Sto provando a imparare una cosa alla volta, qui (specificatamente rspec), prima di giocare con strumenti associati come factory-girl, mocha, auto-test, ecc. In quanto tale, sto cercando di ottenere il dead-simple , se goffo, infissi funzionanti.

Ad ogni modo, ecco il codice:

/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 

E quello che ho' quando ricevo "rake spec" è:

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: 

Cioè, non riconosce "utente (: pippo)" come un metodo valido.

Gli apparecchi stessi devono essere ok, poiché quando li carico nello sviluppo db tramite 'rake db: fixtures: load', posso verificare che foo e bar siano presenti in quel db.

Mi sento come se mi mancasse qualcosa di ovvio qui, ma mi sono strappato i capelli tutto il giorno senza alcun risultato. Qualsiasi aiuto sarebbe apprezzato.

risposta

32

Se si definisce infissi come 'utenti', allora il modo di usarli è tramite il metodo con lo stesso nome:

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 

Il singolare è rilevante solo per la classe stessa (Utente). Spero che tu abbia ancora dei capelli se questo è solo un bug di una lettera.

+1

Dannazione. Beh, ero sicuro che fosse qualcosa di stupido, ed ero dannatamente corretto. Grazie, l'ha risolto. :) – Fishtoaster

+0

@tadman Sei online? –

7

Se si desidera impostare i vostri dispositivi a livello globale, all'interno del vostro spec_helper o rails_helper è possibile aggiungere:

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