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: incheckout_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:inloop' /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:inmon_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: inconnection' /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:inretrieve_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:inclean' /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: inblock 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: inclean' /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
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