2010-05-18 10 views
9

Mamy duży projekt dla wielu programistów pod Railsami, w którym używamy testów zarówno dla modeli, jak i kontrolerów. Obecnie programiści muszą zmienić parametry bazy danych na "testowe", aby dopasować je do lokalnych środowisk deweloperskich przed uruchomieniem testów. Zastanawiam się, czy istnieje sposób, aby uruchomić te testy w środowisku innym niż "test"?Czy testy jednostek Railsowych mogą być wykonywane w innym środowisku niż test?

Na przykład mamy w database.yml:

test: 
    database: ... 
    host: ... 
    username: ... 
    password: ... 
... 
dev-one: 
    ... 
dev-two: 
    ... 

nie mogę znaleźć nic w docs w tej sprawie, ale może szukam w złym miejscu. Jakieś pomysły?

Dzięki!

+0

Jakie ramy testowania używasz? –

+0

Po prostu używamy podstawowego Test :: Unit, niczego poza tym. Nasze potrzeby testowe są dość proste i bardziej dotykają logiki kontrolera niż cokolwiek innego, ale framework nie będzie (o ile mi wiadomo) pozwoli nam przeprowadzać testy funkcjonalne bez uruchamiania warstwy bazy danych. Zauważ, że nie jestem dużo programisty Ruby/Rails, więc jest to dla mnie zupełnie nowe ... – futureal

+0

czy masz jednego 'database.yml' dla wszystkich programistów? Dlaczego nie pozwolisz każdemu deweloperowi stworzyć swojego własnego 'database.yml'? Polecam używanie różnych 'database.yml' dla każdego programisty. – jigfox

Odpowiedz

0

Tylko kwestia określenia środowiska jawnie, kiedy masz zamiar uruchomić testy. Potrzebujesz tylko kilku przygotowań wcześniej.

Załóżmy, że twoje nowe środowisko zostanie nazwane "testjohn" (prawdopodobnie dla programisty o imieniu John). Następnie:

1- kopiowania konfiguracji/Środowiska/test.rb do konfiguracji/Środowiska/testjohn.rb

2- dodać odpowiednie pokoju DB do konfiguracji/database.yml (skopiować z sekcji testowej zmień jej nazwę, a następnie prawdopodobnie zmień nazwę bazy danych, hasło i inne dane). My (raczej uproszczone) Przykład wykorzystuje to:

testjohn: 
    adapter: sqlite3 
    database: db/testjohn.sqlite3 
    pool: 5 
    timeout: 5000 

3- uruchomić swoje testy w następujący sposób:

RAILS_ENV="testjohn" rake db:migrate 
RAILS_ENV="testjohn" rake test:units 

Nawiasem mówiąc, ponieważ RAILS_ENV jest tylko zmienna, może mieć skrypt, który ustawia go wcześniej, lub nawet każdy programista konfiguruje własną zmienną RAILS_ENV w swoim pliku .profile lub dowolnym pliku. W ten sposób po prostu uruchamiają test rake: : jednostki i testy automagicznie wykonują w ich spersonalizowanym środowisku.

+2

Docenić odpowiedź, jednak to jest dokładnie to, co próbowałem i to nie działa. Środowisko określone w RAILS_ENV jest rzeczywiście załadowane w kontekście zadania rake, jednak gdy Ruby wykonuje twoje testy, po cichu przełącza się do twojego środowiska testowego i czyści testową bazę danych i ładuje twoje urządzenia. Po dalszych badaniach wydaje się, że takie zachowanie jest zakodowane dość głęboko w Test :: Unit i w pewnym sensie rezygnuję z tej możliwości. Ale wciąż bardzo otwarte na sugestie. – futureal

+1

również próbował tego, nie działa – Joshua

Powiązane problemy