Test gibt falsches Ergebnis

Testen einer Rails-Anwendung

Test gibt falsches Ergebnis

Beitragvon dresinio am 01.12.2008, 16:01

Hallo liebe RoR-Gemeinde,

seit gestern versuche ich mit RoR. Dazu habe ich mir das Buch "Professionelle Webentwicklung mit Ruby on Rails" bon Jens-Christian Fischer besorgt. Dort wird im Kapitel Test ein einfacher Test für einen Controller pages, Methode show geschrieben, der mit id=1 testet. Die Dateien sehen folgendermaßen aus:

pages_controller.rb:
Code: Alles auswählen
class PagesController < ApplicationController
  def index
    @pages = Page.find :all
  end
 
  def show
    @page = Page.find(params[:id])
  end
end      


show.erb.html:
Code: Alles auswählen
<h1><%= h @page.title %></h1>
<p>Kategorie: <%= h @page.category %></p>
<p><%= h @page.body %></p>


und die pages_controller_test.rb:
Code: Alles auswählen
require 'test_helper'

class PagesControllerTest < ActionController::TestCase
  # Replace this with your real tests.
  def test_truth
    assert true
  end

  def test_index
    get :index
    assert_response :success
  end
   
  def test_show_with_valid_id
    get :show, :id => 1
    assert_response :success
  end
 
  def test_show_with_invalid_id
    get :show, :id => 99
    assert_response :missing
  end

end


In der Datenbank existieren drei Einträge mit den id's 1,2,3. Über den Browser werden die Einträge fehlerfrei angezeigt. Der Test ergibt allerdings:
somehow@melone-ubuntu804:~/rails/work/referenz$ rake
(in /home/somehow/rails/work/referenz)
/usr/bin/ruby1.8 -Ilib:test "/usr/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake/rake_test_loader.rb" "test/unit/page_test.rb"
Loaded suite /usr/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake/rake_test_loader
Started
.
Finished in 0.352892 seconds.

1 tests, 1 assertions, 0 failures, 0 errors
/usr/bin/ruby1.8 -Ilib:test "/usr/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake/rake_test_loader.rb" "test/functional/pages_controller_test.rb"
Loaded suite /usr/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake/rake_test_loader
Started
..F.
Finished in 0.475632 seconds.

1) Failure:
test_show_with_valid_id(PagesControllerTest)
[./test/functional/pages_controller_test.rb:16:in `test_show_with_valid_id'
/usr/lib/ruby/gems/1.8/gems/activesupport-2.1.2/lib/active_support/testing/setup_and_teardown.rb:33:in `__send__'
/usr/lib/ruby/gems/1.8/gems/activesupport-2.1.2/lib/active_support/testing/setup_and_teardown.rb:33:in `run']:
Expected response to be a <:success>, but was <404>

4 tests, 4 assertions, 1 failures, 0 errors
/usr/bin/ruby1.8 -Ilib:test "/usr/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake/rake_test_loader.rb"
Errors running test:functionals!


Ich kann irgendwie keinen Fehler erkennen. Die Methoden sind 1 zu 1 aus dem Buch übernommen. Wer kann mir sagen, was da falsch läuft ? Das Ergebnis dürfte ja sein, dass er die id=1 findet, und kein 404 Error kommt. Bin über jeden Rat dankbar.

Grüße
dresinio
dresinio
 
Beiträge: 1
Registriert: 01.12.2008, 15:46

Re: Test gibt falsches Ergebnis

Beitragvon joyman am 23.12.2008, 12:03

Damit die Daten gefunden werden müssen Musterdaten in der pages.yml eingetragen werden. Da die testroutine nicht auf die development Datenbank zugreift.
pages.yml:

# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html

one:
id: 1
title: "Rails"
body: "Alles über rails"
category: "rails"

two:
id: 2
title: "Ruby"
body: "Alles über Ruby"
category: "ruby"
joyman
 
Beiträge: 3
Registriert: 23.12.2008, 11:52

Re: Test gibt falsches Ergebnis

Beitragvon jcfischer am 23.12.2008, 14:18

Im Buch ist auf Seite 73 beschrieben, was das Problem ist...

Im PagesControllerTest fehlt die Zeile

fixtures :pages

die dafür sorgt, dass die Testdaten auch effektiv zur Verfügung stehen.


weiterhin viel Erfolg mit dem Buch!

Jens-Christian Fischer

--
Professionelle Webentwicklung mit Rails 2.0
http://rails-praxis.de - die Seite zum Buch
http://shop.invisible.ch - das Buch als PDF - EUR 25.--
jcfischer
 
Beiträge: 1
Registriert: 23.12.2008, 14:14

Re: Test gibt falsches Ergebnis

Beitragvon joyman am 23.12.2008, 15:37

Ich hab jetzt mit dem gleichen Beispiel genau das umgekehrte Problem.

Das bedeutet, das bei mir die Zeilen

def test_show_with_invalid_id
get :show, :id => 99
assert_response :missing
end

nicht das gewünschte Ergebnis liefern.

Er findet die ID 99 nicht (was je eigentlich durch das :missing abgefangen wird und true liefern sollte) und bringt dann einen Fehler:

test_edit_action_invalid_id(PagesControllerTest):
ActiveRecord::RecordNotFound: Couldn't find Page with ID=99
/Library/Ruby/Gems/1.8/gems/activerecord-2.2.2/lib/active_record/base.rb:1528:in `find_one'
/Library/Ruby/Gems/1.8/gems/activerecord-2.2.2/lib/active_record/base.rb:1511:in `find_from_ids'
/Library/Ruby/Gems/1.8/gems/activerecord-2.2.2/lib/active_record/base.rb:590:in `find'
/Users/jheinrich/Rails Projects/referenz/app/controllers/pages_controller.rb:12:in `edit'
/Library/Ruby/Gems/1.8/gems/actionpack-2.2.2/lib/action_controller/base.rb:1253:in `send'
/Library/Ruby/Gems/1.8/gems/actionpack-2.2.2/lib/action_controller/base.rb:1253:in `perform_action_without_filters'
/Library/Ruby/Gems/1.8/gems/actionpack-2.2.2/lib/action_controller/filters.rb:617:in `call_filters'
/Library/Ruby/Gems/1.8/gems/actionpack-2.2.2/lib/action_controller/filters.rb:610:in `perform_action_without_benchmark'
/Library/Ruby/Gems/1.8/gems/actionpack-2.2.2/lib/action_controller/benchmarking.rb:68:in `perform_action_without_rescue'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/benchmark.rb:293:in `measure'
/Library/Ruby/Gems/1.8/gems/actionpack-2.2.2/lib/action_controller/benchmarking.rb:68:in `perform_action_without_rescue'
/Library/Ruby/Gems/1.8/gems/actionpack-2.2.2/lib/action_controller/rescue.rb:136:in `perform_action_without_caching'
/Library/Ruby/Gems/1.8/gems/actionpack-2.2.2/lib/action_controller/caching/sql_cache.rb:13:in `perform_action'
/Library/Ruby/Gems/1.8/gems/activerecord-2.2.2/lib/active_record/connection_adapters/abstract/query_cache.rb:34:in `cache'
/Library/Ruby/Gems/1.8/gems/activerecord-2.2.2/lib/active_record/query_cache.rb:8:in `cache'
/Library/Ruby/Gems/1.8/gems/actionpack-2.2.2/lib/action_controller/caching/sql_cache.rb:12:in `perform_action'
/Library/Ruby/Gems/1.8/gems/actionpack-2.2.2/lib/action_controller/base.rb:524:in `send'
/Library/Ruby/Gems/1.8/gems/actionpack-2.2.2/lib/action_controller/base.rb:524:in `process_without_filters'
/Library/Ruby/Gems/1.8/gems/actionpack-2.2.2/lib/action_controller/filters.rb:606:in `process_without_session_management_support'
/Library/Ruby/Gems/1.8/gems/actionpack-2.2.2/lib/action_controller/session_management.rb:134:in `process_without_test'
/Library/Ruby/Gems/1.8/gems/actionpack-2.2.2/lib/action_controller/test_process.rb:18:in `process'
/Library/Ruby/Gems/1.8/gems/actionpack-2.2.2/lib/action_controller/test_process.rb:407:in `process'
/Library/Ruby/Gems/1.8/gems/actionpack-2.2.2/lib/action_controller/test_process.rb:376:in `get'
test/functional/pages_controller_test.rb:56:in `test_edit_action_invalid_id'
/Library/Ruby/Gems/1.8/gems/activesupport-2.2.2/lib/active_support/testing/setup_and_teardown.rb:60:in `__send__'
/Library/Ruby/Gems/1.8/gems/activesupport-2.2.2/lib/active_support/testing/setup_and_teardown.rb:60:in `run'

1 tests, 0 assertions, 0 failures, 1 errors

Das versteh ich nicht !?!?!?

Könnt ihr mir da helfen???
joyman
 
Beiträge: 3
Registriert: 23.12.2008, 11:52

Re: Test gibt falsches Ergebnis

Beitragvon joyman am 24.12.2008, 13:13

HILFE!!!
joyman
 
Beiträge: 3
Registriert: 23.12.2008, 11:52

Re: Test gibt falsches Ergebnis

Beitragvon yersi am 11.01.2009, 00:09

@joyman:

Bin zwar selber noch Anfänger, aber der von Dir geschilderte Fehler dürfte darauf zurückzuführen sein, dass Du kein
'rescue_from ActiveRecord::RecordNotFound' statement in pages_controller.rb oder application.rb eingefügt hast. Nur dann ist ja ein "404" als Reaktion auf eine ungültige ID definiert.

Gruß,
yersi
yersi
 
Beiträge: 1
Registriert: 11.01.2009, 00:01

Re: Test gibt falsches Ergebnis

Beitragvon N317V am 19.06.2009, 18:25

jcfischer hat geschrieben:Im Buch ist auf Seite 73 beschrieben, was das Problem ist...

Im PagesControllerTest fehlt die Zeile

fixtures :pages

die dafür sorgt, dass die Testdaten auch effektiv zur Verfügung stehen.


Hallo Herr Fischer,

auch ich besitze Ihr Buch. Das Einfügen der Zeile fixtures :pages hilft leider gar nichts. Der index-Test ist erfolgreich, der "test with valid id" schlägt fehl und bringt eine 404. Im Browser funktioniert der Aufruf auch bei mir. Rails-Version ist 2.2.2 auf Mac OS X.

Schöne Grüße!
N317V
 
Beiträge: 2
Registriert: 19.06.2009, 18:08

Re: Test gibt falsches Ergebnis

Beitragvon _ad_ am 27.07.2009, 09:59

Hallo joyman,

Zitat an:

Ich hab jetzt mit dem gleichen Beispiel genau das umgekehrte Problem.

Das bedeutet, das bei mir die Zeilen

def test_show_with_invalid_id
get :show, :id => 99
assert_response :missing
end

nicht das gewünschte Ergebnis liefern.

Er findet die ID 99 nicht (was je eigentlich durch das :missing abgefangen wird und true liefern sollte) und bringt dann einen Fehler:

Zitat aus.

Ich bin auch in dieses Problem reingelaufen. Nachdem ich in pages_controller_test.rb die Zeilen

#require 'pages_controller'

# Re-raise errors caught by the controller
#class PagesController; def rescue_action(e) raise e end; end

deaktiviert habe, funktionierte der rake Lauf so wie beschrieben.

Ich tippe mal, es hat sich etwas zwischen Rails 2.0.2 (Rails Stand im Buch) und dem jetzigen Rails 2.3.3, oder auch Rails 2.2.2 geaendert. Auf diese Problemloesung bin ich indirekt ueber diese Seite https://rails.lighthouseapp.com/project ... onal-tests gekommen.

Um solche Probleme beim Abarbeiten des Buches aus dem Weg zu gehen, sollte man sich das Rails gem in der Version 2.0.2 holen. Damit zumindest ist man auf dem Level des Buches.

Pedro
_ad_
 
Beiträge: 1
Registriert: 27.07.2009, 09:25


Zurück zu Testen

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron