1) LanguagesController GET 'index' should be successful
Failure/Error: get 'index'
PGError: ERROR: relation "languages" does not exist
LINE 1: SELECT "languages".* FROM "languages" WHERE (activate = true...
^
: SELECT "languages".* FROM "languages" WHERE (activate = true and abbr != 'pl') ORDER BY name
# ./app/controllers/application_controller.rb:12:in `set_locale'
# ./spec/controllers/languages_controller_spec.rb:7:in `block (3 levels) in <top (required)>'
Wyniki są identyczne dla każdej akcji
A teraz wyjaśnienia, w application_controller.rb:12 mam wpisany taki kod:
05. describe "GET 'index'" do
06. it "should be successful" do
07. get 'index'
08. response.should be_success
09. end
10. end
Akcja w kontrolerze wygląda natomiast tak:
@lang = Language.find :all, :order => 'name'
EDIT
błąd bazy danych wynikał z jej braku. Utworzyłem ją i teraz mam błąd:
1) LanguagesController GET 'index' should be successful
Failure/Error: response.should be_success
expected success? to return true, got false
# ./spec/controllers/languages_controller_spec.rb:8:in `block (3 levels) in <top (required)>'
Generalnie jest to dla mnie bardzo poważna wada RSpeca że mówi ci tylko że błąd istnieje, i niewiele o tym co jest jego powodem, albo gdzie dokładnie występuje.
Sprawdź czy masz widok, możesz spróbować otworzyć stronę w przeglądarce i zobaczyć co się dzieje. Sprawdź m.in. czy nie masz gdzieś before filtrów (typu autentykacja), lubią się wypieprzać w testach po cichu.
describe "GET 'index'" do
it "should be successful" do
get 'index'
response.should be_success
end
end
Ten kod sprawdza tylko czy kod odpowiedzi to 200 - i to wystarcza do test suite. Podczas diagnozowania błędu warto dodać dodatkowe sprawdzenia, np. żeby się przekonać czy nie nastąpił redirect
response.should_not be_redirect
response.should be_success
Popatrz też w logi (logs/test.log) i zobacz co tam się dzieje.
Jak dla mnie g. z tego wynika, albowiem nie mówi ci PRZYCZYNY dla której akcja się nie powiodła.
No jak dla mnie to właśnie jest wina rspeca że nie mówi co jest źle! A jak dla mnie nie mówi ile trzeba bo nie mówi ci jak naprawić błąd, ani gdzie występuje, tylko że istnieje po prostu.
Kwestja preferencji podejrzewam, ja wolę już po przejechaniu testów widzieć gdzie mam błąd niż uruchamiać testy, patrzeć jak się pierdolną, dodawać debbugera w 20 miejscach i 10 dodatkowych asercji żeby się dowiedzieć czy przypadkiem nie dostałem redirecta bo zapomniałem zastubować autentykację.
o wiele bardziej mi pasuje taki na przykąłd komunikat:
Jak dla mnie g. z tego wynika, albowiem nie mówi ci PRZYCZYNY dla której akcja się nie powiodła.
No jak dla mnie to właśnie jest wina rspeca że nie mówi co jest źle! A jak dla mnie nie mówi ile trzeba bo nie mówi ci jak naprawić błąd, ani gdzie występuje, tylko że istnieje po prostu.
Kwestja preferencji podejrzewam, ja wolę już po przejechaniu testów widzieć gdzie mam błąd niż uruchamiać testy, patrzeć jak się pierdolną, dodawać debbugera w 20 miejscach i 10 dodatkowych asercji żeby się dowiedzieć czy przypadkiem nie dostałem redirecta bo zapomniałem zastubować autentykację.
o wiele bardziej mi pasuje taki na przykąłd komunikat:
I odrazu wiesz o co bangla.[/quote]
No to zaimplementuj Response Code Matcher
Powróciłem do pisania testów aplikacji, ale pojawił się problem innego rodzaju.
Mam ten kontroler LanguagesController, który ma kilka akcji, ma standardowe akcje dla resources i dodane do tego dodatkowe trzy akcje. Akcja ‘index’ wyświetla oczywiście listę dostępnych języków. Jak chciałem napisać do tego testy to wpisałem tak:
require 'spec_helper'
describe LanguagesController do
describe "GET 'index'" do
it "should be successful" do
get 'index'
response.should be_success
end
end
end
Ale po uruchomieniu polecenia
<internal:lib/rubygems/custom_require>:29:in `require': no such file to load -- spec_helper (LoadError)
from <internal:lib/rubygems/custom_require>:29:in `require'
from /home/wafcio/rails_projects/spg/spec/controllers/languages_controller_spec.rb:1:in `<top (required)>'
from /home/wafcio/.rvm/gems/ruby-1.9.2-p136@rails3/gems/rspec-core-2.0.1/lib/rspec/core/configuration.rb:306:in `load'
from /home/wafcio/.rvm/gems/ruby-1.9.2-p136@rails3/gems/rspec-core-2.0.1/lib/rspec/core/configuration.rb:306:in `block in load_spec_files'
from /home/wafcio/.rvm/gems/ruby-1.9.2-p136@rails3/gems/rspec-core-2.0.1/lib/rspec/core/configuration.rb:306:in `map'
from /home/wafcio/.rvm/gems/ruby-1.9.2-p136@rails3/gems/rspec-core-2.0.1/lib/rspec/core/configuration.rb:306:in `load_spec_files'
from /home/wafcio/.rvm/gems/ruby-1.9.2-p136@rails3/gems/rspec-core-2.0.1/lib/rspec/core/command_line.rb:18:in `run'
from /home/wafcio/.rvm/gems/ruby-1.9.2-p136@rails3/gems/rspec-core-2.0.1/lib/rspec/core/runner.rb:55:in `run_in_process'
from /home/wafcio/.rvm/gems/ruby-1.9.2-p136@rails3/gems/rspec-core-2.0.1/lib/rspec/core/runner.rb:46:in `run'
from /home/wafcio/.rvm/gems/ruby-1.9.2-p136@rails3/gems/rspec-core-2.0.1/lib/rspec/core/runner.rb:10:in `block in autorun'