Ruby - Et si on écrivait un ORM ? - partie 11
On a dit qu’il était temps de splitter les fichiers, aussi bien pour les tests que pour le code d’implémentation.
On commence par créer un dossier spec avec à l’intérieur le fichier
database_spec.rb
:
Puis on vérifie que tout va bien:
$ rspec spec/database_spec.rb
..
Finished in 0.00267 seconds
2 examples, 0 failures
Au tour de la classe Base
d’avoir son propre fichier de tests. Je vous
épargne le contenu des méthodes it
, il n’a pas changé:
Place à la vérification:
$ rspec spec/base_spec.rb
An error occurred in an after hook
NoMethodError: undefined method `execute' for false:FalseClass
[...]
5 examples, 5 failures
Bah oui, ça ne devrait pas nous surprendre. Notre ancien fichier de
test global était mal conçu. On n’est plus connecté à la base de
données. Et là se pose la question de savoir si on doit se connecter
avant chaque test, dans un before :each
ou bien une fois pour toute
au début du fichier, dans un before :all
? La seconde solution me parait
la plus adaptée, mais on pourra toujours en changer par la suite si besoin
est:
Or relance les tests:
$ rspec spec/base_spec.rb
.....
Finished in 0.10185 seconds
5 examples, 0 failures
Ok, cool. Reste encore à lancer les tests au complet avant de crier victoire:
$ rspec
.....F.
Failures:
1) SORM::Database connection is not connected
Failure/Error: expect(SORM::Database.connected?).to be false
expected #<FalseClass:0> => false
got #<TrueClass:2> => true
Compared using equal?, which compares object identity,
but expected and actual are not the same object. Use
`expect(actual).to eq(expected)` if you don't care about
object identity in this example.
# ./spec/database_spec.rb:6:in `block (3 levels) in <top (required)>'
Finished in 0.03452 seconds
7 examples, 1 failure
Failed examples:
rspec ./spec/database_spec.rb:5 # SORM::Database connection is not connected
Et oui, on ne maitrise plus l’ordre des tests ! base_spec.rb
, premier
dans l’ordre alphabétique a été joué avant, et donc database_spec.rb
se
retrouve avec une base de données connectée.
On ajoutera donc la prochaine fois une méthode disconnect
. Et ça me
fait penser aussi qu’il faudra configurer Rspec pour jouer les tests dans
un ordre aléatoire.
To be continued
À demain.