2009-10-10 17 views
9

rake test:units kończy się niepowodzeniem w mojej aktualnej aplikacji, ponieważ brakuje wymaganych danych urządzeń.Testowanie jednostek Railsowych nie obciąża urządzeń

Jeśli ładuję urządzenia ręcznie za pomocą rake db:fixtures:load RAILS_ENV=test, testy jednostkowe działają, ale rake usuwa bazę danych testów.

Moja test_helper zawiera fixtures :all i moje testy dziedziczą po niej - ale urządzenia po prostu się nie ładują.

W tej chwili jestem trochę bezużyteczna i naprawdę potrzebuję pomocy!

Dziękuję i do widzenia,

Joe

edit: Próbowałem wiele i myślę, że ma do czynienia z niektórych ustawień środowiska lub wtyczek stosowanych w tym projekcie. Czy ktoś wie, gdzie czytać, które pliki są ładowane do środowiska testowego?

+1

Co jest warte, wpadłem na podobny problem, z wyjątkiem tego, że definiowałem stałą, która opierała się na rekordzie bazy danych. Przeniesiono tę stałą do zmiennej instancji i booya. Wygląda na to, że stałe są definiowane przed załadowaniem urządzeń. Twoje zdrowie. –

Odpowiedz

3

końcu znalazłem ten problem, chociaż rozwiązania jest rodzaj hacky.

Jedna wtyczka polega na tym, że w bazie danych znajduje się co najmniej jeden wiersz. Więc co się stało, było:

  1. grabie schematu bazy danych ładunki
  2. grabie próbuje załadować środowisku
  3. środowisko zawiera wtyczki
  4. wtyczki ładowania nie powiedzie z powodu brakuje co najmniej jeden wiersz
  5. żadne urządzenia są ładowane

To hakowate rozwiązanie to: umieść potrzebne dane bezpośrednio w schemacie, a nie w urządzeniach, ponieważ jest załadowany do późna .

Poszukuję wygodniejszego rozwiązania i zaktualizuję tę odpowiedź, jeśli ją znajdę.

+3

Wtyczki nie powinny robić takich rzeczy. Najlepiej naprawić wtyczkę i wysłać mu żądanie ściągnięcia na github. –

+0

Naprawiłem problem w wtyczce i wkrótce prześlę łatkę. ;) – xijo

0

Nie wiesz, jeśli już to zrobił, ale eksportować dane testowe z bazy danych do yml plików w test/opraw za pomocą wtyczki jak ar_fixtures

+0

Hmm, problemem jest pobranie danych z urządzeń do bazy danych, myślę, że ar_fixtures działa odwrotnie! :) – xijo

+0

oh oops :) przepraszam, źle przeczytałem pytanie – Jen

5

zawiesić połączenie do fixtures :all w swojej klasie testowej, nie super class (test_helper). Domyślam się, że inicjalizacja super klasy nie działa tak, jak tego oczekujesz, i że nie zostanie wywołana fixtures :all. Być może spróbuj wywołać wywołanie metodą initialize test_helper.

Moi test/test_helper.rb wygląda następująco:

ENV['RAILS_ENV'] ||= 'test' 
require File.expand_path('../../config/environment', __FILE__) 
require 'rails/test_help' 

class ActiveSupport::TestCase 
    # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order. 
    fixtures :all 

    # Add more helper methods to be used by all tests here... 
end 
+0

Witam cstump, próbowałem umieścić 'fixtures: all' bezpośrednio w mojej klasie testowej, ale to nie zadziałało. Wygląda na to, że połączenie nie ma żadnego efektu - ale po prostu nie potrafię wytłumaczyć dlaczego! – xijo

+0

+1: To działało dla mnie i podoba mi się to rozwiązanie, ponieważ jest zlokalizowane i jawne. W tym przypadku wystarczy 'fixtures: users' within 'UsersControllerTest'. – Johnsyweb

5

Innym podejściem jest napisanie własnego niestandardowego zlecenia rake do testowania.

Na przykład:


task :test_units do 

    RAILS_ENV = 'test' # Force the environment to test 

    puts "Recreate the test database" 
    Rake::Task['db:test:prepare'].invoke 

    puts "Seed the database with fixtures" 
    Rake::Task['db:fixtures:load'].invoke 

    puts "Executing Unit Tests" 
    Rake::Task['test:units'].prerequisites.clear 
    Rake::Task['test:units'].invoke 
end 

+0

To zadziałało dla mnie, +1. Jedyną różnicą było to, że musiałem umieścić 'RAILS_ENV = 'test'' po' db: test: prepare', albo Sqlite3 nie powiedzie się z błędem mówiąc, że nie mam odpowiednich uprawnień do wyczyszczenia testowego DB. –

0

miałem ten sam problem. Lub raczej, problem polegał na tym, że moje urządzenia nie były aktualne w schemacie bazy danych.Zamiast rzucić wyjątek, szyny właśnie wykorzystały testową bazę danych jako rozwiązanie awaryjne. Najbardziej niepewny.

0

Mój problem polega na tym, że zapomniałem wpisać "require" test_helper "" na czele. np.

require 'test_helper' 

class AdminUserTest < ActiveSupport::TestCase 
    # test "the truth" do 
    # assert true 
    # end 
end