2009-12-29 13 views
20

Próbuję nauczyć się architektury rDEC BDD w kontekście projektu szyny. Problemem, który mam, jest to, że nie mogę, dla mojego życia, ustawić poprawne ładowanie moich urządzeń w opisach rspec.Rails Urządzenia nie ładujące się za pomocą rspec

Nota prawna: Tak, są lepsze rzeczy niż urządzenia do użycia. Próbuję nauczyć się jednej rzeczy na raz, tutaj (konkretnie rspec), zanim zacznę grać z narzędziami pokrewnymi, takimi jak fabryka-dziewczyna, mocha, auto-test, itp. Jako takie, staram się uzyskać martwe-proste , jeśli przylegają, urządzenia działają.

W każdym razie, oto kod:

/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 

I co ja” Otrzymuję, gdy uruchomię "specyfikację rake'u":

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: 

Oznacza to, że nie rozpoznaje on "user (: foo)" jako prawidłowej metody.

Same urządzenia muszą być w porządku, ponieważ po załadowaniu ich do bazy rozwojowej za pomocą "rake db: fixtures: load", mogę sprawdzić, czy foo i pasek są obecne w tej db.

Czuję, że brakuje tu czegoś oczywistego, ale wydzierałem sobie włosy z głowy przez cały dzień bezskutecznie. Każda pomoc będzie doceniona.

Odpowiedz

32

przypadku zdefiniowania urządzeń jako „użytkownicy”, to sposób na wykorzystanie ich jest metodą o tej samej nazwie:

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 

Szczególny ma zastosowanie jedynie do samej klasy (użytkownik). Mam nadzieję, że nadal masz trochę włosów, jeśli to tylko jeden listowy błąd.

+1

Cholera. Cóż, byłem pewien, że to było coś głupiego, a ja miałem cholernie rację. Dzięki, że to rozwiązałeś. :) – Fishtoaster

+0

@tadman Czy jesteś online? –

7

Jeśli chcesz skonfigurować urządzeń na całym świecie, wewnątrz spec_helper lub rails_helper można dodać:

RSpec.configure do |config| 
    config.global_fixtures = :all 
end 
Powiązane problemy