Forum: Rails France Petit problème de débutant avec un UNIT TEST

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
2b0bd0b1463076b372db54b0cde18ecd?d=identicon&s=25 David Freekers (freekers)
on 2010-06-09 15:53
Bonjour!

Je suis en train d'apprendre rails, j'ai réussi a faire mes premiers
tests unitaires et fonctionnels mais depuis que j'ai rajouté une
association has_many dans un de mes modèles mon unit testing plante, et
j'ai l'impression pourtant que ça vient du test et pas de mon modèle..


Je m'explique:

Voici mon modèle Story qui possède l'association has_many (une histoire
peut avoir plusieurs votes):
[code]
class Story < ActiveRecord::Base
  validates_presence_of :name, :link
  has_many :votes
  def latest_votes
    votes.find(:all, :order => 'id DESC', :limit => 3)
  end
end

[/code]

-Dans mon fichier story_test.rb:
[code]
test "votes association" do
    assert_equal [votes(:first), votes(:second) ],
                stories(:first).votes
end
[/code]

et mes fixtures dans test/fixtures:
-stories.yml:
[code]
first:
    name: My shiny weblog
    link: http://poocs.net/

second:
    name: SitePoint Forums
    link: http://www.sitepoint.com/forums/
[/code]

-votes.yml:
[code]
first:
    id: 1
    story_id: 1
    created_at: <%= Time.now.to_s(:db) %>

second:
    id: 2
    story_id: 1
    created_at: <%= Time.now.to_s(:db) %>
[/code]

Donc ensuite je veux lancer mon test unitaire alors je tappe dans mon
terminal "rake test:units" ou, depuis le dossier "test", "ruby
unit/story_test.rb", et j'obtiens le soucis suivant:

[b]Failure:
test_votes_association(StoryTest) [unit/story_test.rb:24]:
<[#<Vote id: 1, story_id: 1, created_at: "2010-06-07 12:10:30",
updated_at: "2010-06-07 16:10:30">,
 #<Vote id: 2, story_id: 1, created_at: "2010-06-07 12:10:30",
updated_at: "2010-06-07 16:10:30">]> expected but was
<[]>.
[/b]

Autrement dit, on dirait que stories(:first) est NIL dans
l'environnement TEST.
Alors que quand j'éxécute mon code en mode développement tout à l'air de
bien fonctionner!

Mes fixtures ne sont-elles pas censées générer les entrées
correspondantes dans la base de données de test?
Au début je pensais que je devais avoir oublier de faire quelque chose
comme faire un rake db:migrate RAILS_ENV="test".. mais ça n'a rien
changé!

Est-ce que j'ai oublié quelque chose.. ou bien est-ce c'est vraiment mon
association has_many qui est mal implémentée, ou mal testée?? Ça
m'étonnerait puisque le code sort d'un manuel d'apprentissage...
En tout cas j'aimerais vraiment être sur de maitriser cet aspect du
testing avant d'aller plus loin dans mon apprentissage de rails, alors
s'il vous plait quelqu'un, au secouuuurs!! :)


David
2b0bd0b1463076b372db54b0cde18ecd?d=identicon&s=25 David Freekers (freekers)
on 2010-06-09 16:28
Il fallait que je spécifie l'ID explicitement dans la fixture des story!
Car effectivement les story créés dynamiquement avaient des ID
aléatoires qui ne correspondait pas du tout aux ID auxquelles
j'associais mes votes (ID 1 et 2 respectivement)

Voilà, merci quand meme!
This topic is locked and can not be replied to.