2011-08-22 9 views
5

Mam pewne problemy z ogórkiem & transakcji bazy danych - w szczególności, gdy uruchomię pakiet testów, transakcje bazy danych nie są czyszczone później.Szyny: Ogórek nie czyszczący DB

Używam szyn 3.1 z obsługą, postgres.

Początkowo funkcje/support/env.rb został skonfigurowany do korzystania database_cleaner, ale konsekwentnie uzyskałem następujący błąd na każdym wywołaniu db:

Brak bazy danych określona. Brakujący argument: baza danych. (ArgumentError) /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0.rc4/lib/active_record/connection_adapters/postgresql_adapter.rb:22:in postgresql_connection' /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0.rc4/lib/active_record/connection_adapters/abstract/connection_pool.rb:292:in new_connection ' /Użytkownicy/john/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0.rc4/lib/active_record/connection_adapters/abstract/connection_pool.rb: 302: in checkout_new_connection' /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0.rc4/lib/active_record/connection_adapters/abstract/connection_pool.rb:254:in blok (2 poziomy) w kasie " /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0.rc4/lib/active_record/connection_adapters/abstract/connection_pool.rb:250:in loop' /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0.rc4/lib/active_record/connection_adapters/abstract/connection_pool.rb:250:in blok w kasie" /Users/john/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/monitor.rb:201:in mon_synchronize' /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0.rc4/lib/active_record/connection_adapters/abstract/connection_pool.rb:249:in Checkout ' /Users/john/.rvm/gems/ruby- 1.9.2-p290/gems/activerecord-3.1.0.rc4/lib/active_record/connection_adapters/abstract/connection_pool.rb: 151: in connection' /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0.rc4/lib/active_record/connection_adapters/abstract/connection_pool.rb:388:in retrieve_connection ' /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0.rc4/lib/active_record/connection_adapters/abstract/connection_specification.rb:107:in retrieve_connection' /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/cucumber-rails-1.0.2/lib/cucumber/rails/hooks/active_record.rb:7:in połączenie' /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/database_cleaner-0.6.7/lib/database_cleaner/active_record/transaction.rb:17:in clean' /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/database_cleaner-0.6.7/lib/database_cleaner/base.rb:77:in clean ' /Users/john /. rvm/gems/ruby-1.9.2-p290/gems/database_cleaner-0.6.7/lib/database_cleaner/configuration.rb: 56: in block in clean' /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/database_cleaner-0.6.7/lib/database_cleaner/configuration.rb:56:in każdy ' /Users/john/.rvm/gems/ruby-1.9.2 -p290/gems/database_cleaner-0.6.7/lib/database_cleaner/configuration.rb: 56: in clean' /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/cucumber-rails-1.0.2/lib/cucumber/rails/hooks/database_cleaner.rb:9:in Po '

Próbowałem wrócić do zwykłych transakcji, ale bez radości. Mogę uzyskać dostęp do bazy danych poprzez konsolę (środowisko ogórka) i tworzyć/usuwać/pobierać rekordy bez żadnych problemów. Pliki config/database.yml, features/support/env.rb, config/environments/cucumber.rb i rspec/spec_helper.rb zostały dodane poniżej. Wszelkie sugestie bardzo mile widziane - ten każdy miał mnie zakłopotany przez jakiś czas:

config/database.yml

default: &defaults 
    adapter: postgresql 
    username: rails_dev 
    password: foobar 

development: 
    <<: *defaults 
    database: fcct_d 

test: &test 
    <<: *defaults 
    database: fcct_t 

production: 
    <<: *defaults 
    database: fcct_p 
    username: fcct 
    password: k#1*5Avb3dTa 

cucumber: 
    adapter: postgresql 
    username: rails_dev 
    password: foobar 
    database: fcct_t 

CECHY/support/ENV.RB

require 'rubygems' 
require 'spork' 

Spork.prefork do 
    require 'cucumber/rails' 
    require 'database_cleaner' 
    require 'database_cleaner/cucumber' 


    Capybara.default_selector = :css 

    ActionController::Base.allow_rescue = false 

    begin 
    DatabaseCleaner.strategy = :transaction 
    rescue NameError 
    raise "You need to add database_cleaner to your Gemfile (in the :test group) if you wish to use it." 
    end 

end 

Spork.each_run do 
    require 'factory_girl' 
    require File.join(File.dirname(__FILE__), '../../lib/existing_factory/existing_factory.rb') 
end 

config/środowiskach/ogórek .RB

BusinessschoolCorporate :: Application.configure do # Settings określone tutaj będzie mają pierwszeństwo nad tymi, w config/environment.rb

# Środowisko testowe są wykorzystywane wyłącznie do uruchomienia aplikacji

zestawu testowego. W przeciwnym razie nie będziesz musiał z nim pracować. Pamiętaj, że

że # twoja testowa baza danych to "scratch space" dla zestawu testowego i jest wyczyszczony # i odtworzony między testami.Nie polegaj na danych tutaj!
config.cache_classes = true
config.use_transactional_fixtures = true

# Konfiguracja statycznego serwera zasobów dla testów z Cache-Control dla wydajności config.serve_static_assets = true
config.static_cache_control = „publicznych, max-age = 3600"

komunikaty o błędach # Zaloguj kiedy przypadkowo wywołać metody na zerowe
config.whiny_nils = true

# show pełne raporty o błędach i wyłączyć buforowanie
config.consider_all_requests_local = true
config.action_controller.perform_caching = false

# Podnieś wyjątki zamiast renderowania szablonów wyjątków
config.action_dispatch.show_exceptions = false

# Wyłącz ochronę prośba fałszerstwo w środowisku testowym
config.action_controller.allow_forgery_protection = false

# Powiedz Action Mailer, aby nie dostarczał e-maili do prawdziwego świata. # Metoda: testowa metoda dostawy akumuluje wysłane wiadomości e-mail w tablicy # ActionMailer :: Base.deliveries.
config.action_mailer.delivery_method =: test

# Użyj SQL zamiast schematu Active Record za wywrotka podczas tworzenia bazy danych testową. # Jest to konieczne, jeśli Twój schemat nie może być całkowicie dumpingowych przez wywrotka schematu, # jak jeśli masz ograniczenia lub bazy danych specyficznych typów kolumn # config.active_record.schema_format =: sql

# Zawiadomienia Drukuj amortyzacyjne do stderr
config.active_support.deprecation =: stderr końca

SPEC/SPEC_HELPER.RB

wymaga 'rubygems' wymagają 'Spork'

Spork.prefork do # Ładowanie więcej w tym bloku spowoduje, że twoje testy będą działać szybciej. Jednakże, jeśli zmienisz konfigurację lub kod z bibliotek załadowanych tutaj, będziesz musiał ponownie uruchomić obsługę, aby zadziałał . # Ten plik jest kopiowany do specyfikacji/po uruchomieniu 'rails wygeneruj rspec: install' ENV ["RAILS_ENV"] || = 'test' wymaga File.expand_path ("../../ config/environment", PLIK) wymagają 'rspec/Rails

# wymaga wsparcia rubinowe plików z niestandardowych dopasowujących i makr, etC# w specyfikacji/support/i jego podkatalogów.
Dir [Rails.root.join ("spec/support/* / .rb")]. Każdy {| f | wymagają f}

RSpec.configure do | config | # == Mock ramowa # # Jeśli wolisz używać mokka, flexmock lub RR, odkomentuj odpowiednią linię: # # config.mock_with: mokka # config.mock_with: flexmock # config.mock_with: rr config.mock_with: rspec

# Remove this line if you're not using ActiveRecord or 

ActiveRecord oprawy # config.fixture_path = "# {:: Rails.root}/Spec/uchwyty"

# If you're not using ActiveRecord, or you'd prefer not to run 

Każdy z Twoich przykładów # w ramach transakcji, usuń następujący wiersz lub przypisz nieprawdziwy # zamiast prawdziwego. config.use_transactional_fixtures = true end

koniec

Spork.each_run zrobić # Ten kod będzie uruchamiane przy każdym uruchomieniu swoje widowisko.

koniec

Odpowiedz

1

Dla osób zastanawiających się - to był fakt, że miałem domyślne ustawienia & w moim pliku config/database.yml. Czyszczenie baz danych ma własne wywołanie "defaults", które przechwytuje informacje o konfiguracji.

0

Dlaczego nie spróbować oddanie config.use_transactional_fixtures = true w pliku CONFIG/ENVIRONMENTS/CUCUMBER.RB?

+0

Witaj Sebastian - dzięki za odpowiedź. Ustalenia transakcyjne zostały ustawione jako prawdziwe, zmieniono je, aby sprawdzić, czy mogę zdiagnozować błąd (poprawiłem powyżej). Niestety, ten sam problem. Dzięki i tak – PlankTon

Powiązane problemy