Spring is hate...

Comment combiner nose, rednose et django

Ça faisait un moment que je n'avais pas djangoté, et je ne disposais pas d'un environnement "optimal" pour coder. Ce qui suit est un reminder personnel, mais j'imagine qu'il pourra parfaitement convenir à quelqu'un qui aurait envie de coder en Python, voire avec Django en utilisant Nose

C'est quoi tout ça ?

  • Django est un framework, permettant de développer des applications web en utilisant des niveaux d'abstraction élevés.
  • Nose est un "teste-tout". Cet utilitaire exécute tous ce qui ressemble de près ou de loin à un test dans un projet Python et affiche le rapport d'exécution. Si tu n'utilises pas le développement dirigé par les tests, disons que... que tu ne sais pas à quel point tu es dans l'erreur. Et en fait, maintenant, tu n'as aucune excuse pour ne pas mettre en oeuvre le TDD. Et si tu ne t'y mets pas, eh bien... toutes les souffrances que tu endures à chaque fois qu'un bout de code pète ou fait péter une autre partie de tes programmes... tu les mérites.
  • Rednose est un plugin pour Nose. Ça peut paraître gadget, mais en fait, la seule chose qu'il fasse, c'est coloriser le rapport de résultats renvoyé par la commande nosetests . En fait, c'est tout bête, mais ça a un effet motivant. On lance ses tests. Si l'un d'entre eux échoue, on voit la sortie en couleurs, avec une mise en page qui rend le message plus compréhensible et plus facile à exploiter. Si tous ces tests passent, la sortie est en couleurs également, mais verte. L'effet "vert == ok" est très satisfaisant, quelque part, ça récompense l'effort.

Comment ça s'installe

Nose est empaqueté pour Ubuntu, mais il vaut quand même mieux installer ce programme via easy_install.

Personnellement, je préfère installer les paquetages en utilisant mon répertoire "home" comme racine. Ainsi, je ne touche pas à l'intégralité de mon installation, et les choses sont plus sécurisées. On peut également utiliser virtualenv, pour se sentir encore plus en sécurité. Pour installer Nose :

$ easy_install --prefix=~ nose

Pour installer RedNose :

$ easy_install --prefix=~ rednose

Pour s'assurer que tout fonctionne, on se place dans le répertoire d'un projet Python, et on lance :

$ nosetests

La sortie est en "noir et blanc" (en monochrome, quoi). En revanche, la commande :

$ nosetests --rednose

Tu devrais voir quelque chose qui ressemble à ça :

Sortie Rednose en couleurs
Cliquer pour voir en plus grand

C'est beau non ?

Et Django dans tout ça ?

Le soucis, c'est que si on lance nosetests dans la racine d'un projet Django, on prend un vilain message d'erreur du genre :

ImportError: Could not import settings 'settings'
(Is it on sys.path? Does it have syntax errors?):
No module named settings

Problème connu... variables d'environnement, DJANGO_SETTINGS_MODULE, blablabla... pour enlever cette épine du pied, rien de plus simple : installer le plugin NoseDjango. Idem que les autres, quoi :

$ easy_install --prefix=~ NoseDjango

On peut ensuite lancer la commande nosetests depuis le projet Django. Et hop.

Bonus :

Pour que le plugin RedNose soit activé en permanence (et donc, qu'on n'ait pas à ajouter l'option --rednose à chaque lancement), il suffit de positionner la variable d'environnement comme suit :

export NOSE_REDNOSE=1

(on met ça dans son .bashrc, genre - j'invente rien, c'est dans la doc)

TDD, ça roxe les ours polaires.

18 Aôut 2009 - 17:42, par Gilles

Question... Est-ce que NoseDjango est compatible 1.1 ? Sur la page du projet, ils ne mentionnent que 1.0b1.

Je ne connaissais pas RedNose. C'est quand même vachement sympa pour les yeux. On s'y retrouve beaucoup plus vite. Je suis pour. Je dis merci.

18 Aôut 2009 - 17:46, par Gilles

Mince, j'ai oublié une question.

Tu utilises quelle police ? J'aime beaucoup.

18 Aôut 2009 - 17:52, par Gilles

Ah, autre chose.

Tu devrais tester aussi Buildout (+ djangorecipe pour tes projets Django) et virtualenvwrapper + pip. Bon, je préfère Buildout quand même. Une vraie tuerie. Je ne peux plus m'en passer. Jacob a d'ailleurs posté un excellent billet / howto sur le sujet.

19 Aôut 2009 - 11:48, par No'

Gilles : la police, c'est Monaco, mais shhhhhhhhhht... j'ai pas payé la licence pour m'en servir (c'est proprio, je me souviens même plus comment j'ai fait pour avoir le ttf)

Pour NoseDjango, je n'ai testé que sur une 1.0.x...

Attention, à tous, en revanche : NoseDjango obère énormément les performances des tests. Les temps d'exécution sont au moins multipliés par 5... c'est un bug connu des développeurs. Je conseille pour les projets ayant un grand nombre de modules à tester de passer par l'utilitaire "normal" de test plutôt que Nose.

19 Avril 2013 - 14:13, par Moustapha ly

je souhaite savoir si NoseDjango peu peut etre utilisé pour tous les version de Django .

19 Avril 2013 - 16:28, par Moustapha ly

je souhaite savoir si NoseDjango peu peut etre utilisé pour tous les version de Django .


Toutes les balises HTML seront supprimées.
Tu peux ajouter des liens comme suit :
J'ajoute [a http://exemple.com "un joli lien"]
Tu peux aussi mettre *en gras* ou {en italique}.