Uruchamianie pojedynczego testu jednostkowego

Pojedynczy plik unit testów możemy odpalić przy pomocy:

rake test TEST=your/path/to/test.rb

np:

rake test TEST=test/unit/user_test.rb

A nie prościej?:

ruby test/unit/user_test.rb

Również:

ruby test/unit/my_class_test.rb

Dodatkowo jeśli podamy

ruby test/unit/my_class_test.rb -n test_my_test_method

Uruchomimy pojedyńczą metodę testu z klasy MyClassTest

ruby test/unit/my_class_test.rb -n /my_method/

Uruchomimy wszystkie metody testowe w klasie MyClassTest, których nazwy odpowiadają wyrażeniu regularnego /my_method/

[quote=tjeden]A nie prościej?:

ruby test/unit/user_test.rb

[/quote]
Powyższa metoda nie załaduje Ci całego środowiska testowego (mówimy o testowaniu alikacji railsowych).

Na górze każdego automatycznie wygenerowanego pliku testu w Rails znajdziesz linijkę:

require File.dirname(__FILE__) + '/../test_helper'

która dokładnie to gwarantuje.

[quote=morgoth][quote=tjeden]A nie prościej?:

ruby test/unit/user_test.rb

[/quote]
Powyższa metoda nie załaduje Ci całego środowiska testowego (mówimy o testowaniu alikacji railsowych).[/quote]
Witam, tzn że:

[code=ruby]fixtures :posts

test “test create comment” do
comment = Comment.new(
:title => “Mój komentarz do tego postu”
:description => “Jest krytyczny”
:post_id => Post.find(:first).id
)
assert comment.save
end[/code]
i wywołanie:

ruby test/unit/comment_test.rb

nie zadziała? Ciekawe.

[quote=Bragi]Na górze każdego automatycznie wygenerowanego pliku testu w Rails znajdziesz linijkę:

require File.dirname(__FILE__) + '/../test_helper'

która dokładnie to gwarantuje.[/quote]
może rails wygenerować require ‘test_helper’, który trzeba zmienić na require ‘test\test_helper’, lub tak jak piszesz.

pozdrawiam

rezultat:

[code]kuba@ibm:~/myapp$ ruby test/unit/user_test.rb
Loaded suite test/unit/user_test
Started
E

Finished in 0.137649409 seconds.

  1. Error:
    test_uniqueness(UserTest):
    ActiveRecord::StatementInvalid: SQLite3::SQLException: no such table: users: DELETE FROM “users” WHERE 1=1[/code]
    … natomiast użycie zgodnie z zaleceniami kolegi Morgotha:

[code]kuba@ibm:~/myapp$ rake test:units TEST=test/unit/user_test.rb
(in /home/kuba/myapp)
/usr/local/bin/ruby -I"lib:test" “/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake/rake_test_loader.rb” “test/unit/user_test.rb”
Loaded suite /usr/local/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake/rake_test_loader
Started
.

Finished in 0.242482916 seconds.

1 tests, 1 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications[/code]
… daje nam upragnioną zieloną kropeczkę ;-). Podsumowując: jeśli ktoś lubi się bawić w migrowanie bazy w środowisku testowym, zamienianie ścieżek w require, to zrezygnowanie z Rake daje mu 100% satysfakcji.

Odpalenie migracji w środowisku testowym (albo rake db:test:clone), faktycznie dramat i pogorzelisko.

Rozumiem, że nie masz za wiele testów i niezbyt często zmieniasz schemat bazy. Załadowanie środowiska testowego w dużym projekcie trwa niezłą chwilkę, nie lubię gdy po odpaleniu testów okazuje się, że połowa z nich wypluwa błędy tylko i wyłącznie dlatego, że np. w międzyczasie jakaś kolumna zmieniła nazwę. Zmienianie ścieżek w require w każdym pliku także nie należy do moich ulubionych czynności.

Niebardzo rozumiem sens tej dyskusji - zaproponowane rozwiązanie jest standardowym sposobem odpalania pojedynczych testów w RoR. Rozwiązanie jest bardzo przydatne w momencie gdy jesteśmy zmuszeni odpalić pojedyncze testy w samych Railsach (np. w actionpack). Nie widzę powodu, dla którego miałbym przerabiać ścieżki we wszystkich plikach testowych wspomnianego actionpacka.

Z odpaleniem ruby ścieżka_do_testu działa bez żadnego podmieniania ścieżek :slight_smile:
Obie metody moim zdaniem są OK. ruby ścieżka łatwiej i szybciej wklepać, rake daje z automatu kompletne środowisko. Nie widzę za bardzo sensu w kłóceniu się na ten temat.