Salut Bolo !
Tu as mis une methode product() sur un Float, pas sur un LineItem.
Tu as dans ta vue item.product (l.5). Or Ruby te dit que item est un
Float. Et toi tu penses encore que c’est une instance de LineItem. Tu
as bien une méthode product() pour LineItem mais tu n’a pas affaire
avec un LineItem :). Ce qui veut dire que @items est une table
composé de Float (ou de quelques autres bizarreries) ; @items ne
comporte pas la bonne collection d’objets (des instances de
LineItem). En fait je ne comprends pas ton code. Qu’y a-t-il dans ton
contrôleur ??
En tout cas, vraiment, prend 3 heures, 3 heures suffisent, pour
apprendre à tester (en tout cas du test unitaire, bien que là je ne
comprennes pas trop d’où vient l’erreur…). Tu verras que ça ne
prend pas plus de temps et que tu ne te retrouvera pas avec un Float
à la place d’un LineItem dans ta vue. Si tu commences pas apprendre
l’unitaire, tu auras rapidement envie de faire du fonctionnel et
enfin passer au top inclus dans rails, le test d’intégration.
C’est assez emmerdant toutes ces personnes qui parlent de tests quand
on en fait pas, on sent bien que ça doit être bien de tester mais ça
paraît chiant de devoir tester, il faut le dire. Mais je suis un
converti récent, et donc pas encore un emmerdeur fini. Dès que je me
mets à coder sans test maintenant, je perds pied, je ne sais plus
trop où j’en suis et surtout je ne sais pas où je vais. On est
tellement plus serein avec des tests !!! Quand on teste on sait où
l’on va, on voit ce qui marche et ne marche pas et ce qui pourrait
marcher mieux. Au final on ne réécrit pas 5 fois son vrai code parce
qu’on n’arrive pas à faire ce qu’on veut ou parce que ça marche pas etc.
Voici en gros l’idée d’un test : on sait ce qu’on a au départ et on
sait ce qu’on veut à l’arrivée. Entre le départ et l’arrivée, il y a
le code de l’application. Designer par des tests c’est définir ce que
l’on a au départ et ce que l’on compte avoir à l’arriver. Ca permet
de mettre en mot, concrètement, notre conception cérébrale du
problème. Et ce n’est qu’en devenant réel que l’on découvre les
problèmes de nos concepts (qui marchent toujours très bien dans notre
tête !)
Le test unitaire (unit) teste les modèles. Si les modèles sont HS,
comment est-ce que les contrôleurs (et encore plus les vues) peuvent
marcher ?? Après, on monte d’un niveau, on a les tests fonctionnels
(functional), qui testent les contrôleur, un par un (on test toutes
les conditions, les variables…) Et enfin on a les test
d’intégration au plus haut niveau d’abstraction. Là on construit des
scénarios d’utilisation possible de du site (machin arrive se
connecte se trompe de mot de passe recommence, va voir son compte,
change son mot de passe, va à la boutique, achète ça, achète une
deuxième fois la même chose…) On vérifie, les interactions entre
les contrôleurs, les variables de session, les routes etc…
Bon, c’est pas très compliqué tout ça, mais après on est beaucoup
plus tranquille.
J’espère pouvoir aider quelque uns à franchir le pas. Si certains
souhaitent d’autres renseignement qu’il n’hésitent pas.
Bonne chance.
NP
P.S. :
def self.for_product(product)
item =self.new
item.quantity =1
item.product = product
item.unit_price = product.price
item
end
Attention aussi : tu ne save() pas ton item, peut-être une autre
source possible de problèmes.
Le 14 août 06 à 22:20, Bolo a écrit :