Tests automatiques avec autotest

NOTE: Cet article tire son origine d’un courriel (en 2009) envoyé aux développeurs de l’Agence Phéromone, pour les informer de la possibilité de rouler des tests de manière constante.

Donc, ma découverte de la fin de semaine dernière est relié à ma paresse de faire les choses. Rouler des tests peut être long (et plate) et pour me donner du courage, j’ai besoin que les choses se fassent de manière automatique. Roulement de tambour… Voici Autotest! Ce gem pour le moins sympathique fait partie de la suite de test ZenTest. Autotest comme son nom l’indique, permet de rouler les tests en temps réel, sans avoir besoin de rouler la commande chaque fois dans le terminal. Autotest détecte automatiquement les changements appliquer aux fichiers et roule les tests qui ont été modifiés. Je crois savoir avec la petite expérience du week-end qu’Autotest ne roule que les tests unitaires. Par contre, il est possible de le configurer avec Cucumber, RSpec, shoulda et auttre gem permettant de faire d’autres type de tests.

Je joins au courriel des images vous permettant de voir les différents aides visuels que l’utilisation d’autotests apporte.

Je crois savoir que les gems suivants vont fonctionner sur toutes les plateformes linux/unix, Pour windows, ben y serait temps que vous changiez parce qu’on fait pas de .NET chez Phéromone et qu’il existe de très bons outils sur les autres OS et vous le savez. :P

*Installation:*
sudo gem install ZenTest autotest-growl autotest-rails redgreen

Ce gem ne fonctionne que sous OS X 10.5 je l’ai tester sur 10.6 et ce n’était pas concluant. => autotest-fsevent

*Configuration de autotest*
Dans le home directory il est possible de mettre un fichier de configuration appeler .autotest contenant les dépendances d’autotest.
Voici la configuration que j’utilise:

# ruby config for autotest gem

require ‘autotest/growl’ # si vous n’utilisez pas Growl commenter le il existe d’autre alternative.
require ‘redgreen/autotest’ # colore le résultats des tests.
# require ‘autotest/fsevent’ # not working on 10.6 for now
require ‘autotest/restart’
require ‘autotest/timestamp’
# require ‘autotest/rcov’ # à tester

# on peut même configurer Rcov :)
# Autotest::AutoUpdate.sleep_time = o
# Autotest::AutoUpdate.update_cmd = o
# Autotest::RCov.command = o
# Autotest::RCov.pattern = o

#ne lit pas ces fichiers.
Autotest.add_hook :initialize do |autotest|
%w{.git .svn .hg .DS_Store ._* vendor}.each { |exception| autotest.add_exception(exception) }
false
end

Référence: http://ph7spot.com/musings/getting-started-with-autotest

Bookmark and Share
Posted in Dev, Rails, travail | Tagged , , | Leave a comment

Grand Club de RDS

Un mot rapide pour mentionner que je travail depuis quelques mois déjà sur le Grand Club de RDS. Mes interventions sur le Grand Club sont motivés par le défi de le rendre plus performant et aussi plus “user friendly”. J’ai écrit un article au début de novembre afin de démontrer les améliorations qui ont été apportés au Grand Club depuis ces quelques mois. Vous pouvez consulter ce bref articles sur le blog de l’agence.

Je vais essayer de publier peut à peut des nouvelles sur les avancées que l’on fait en terme de performance et d’expérience utilisateurs.

Bookmark and Share
Posted in Dev, travail, Web 2.0 | Tagged , , | 2 Comments

Rails trucs rapides #5

Comment créer un fichier de log qui s’appelle autrement que ENV.log

Simple,

Dans le fichier environnement de votre choix entrer simplement cette ligne:

config.logger = Logger.new(RAILS_ROOT+'/log/NOM-DE-VOTRE-CHOIX.log')

Pour plus de possibilité de configuration voir cet excellent article

Bookmark and Share
Posted in Dev, Web | Tagged , , | Leave a comment

Rails trucs rapides #4

Aujourd’hui, un petit truc simple que Benoit Goyette m’a montré, la méthode count() d’ActiveRecords

J’utilisais jusqu’ici la requête suivante Model.find_by_sql(“SELECT COUNT(column_name) FROM table WHERE= conditions”)

J’étais convaincu que cette méthode simple et directe était la méthode la plus rapide et propre pour faire un count eh bien non bien que cette méthode fonctionne, la fonction count de ActiveRecords est très similaires à celle-ci.

Démonstration:

p=Post.find_by_sql(“SELECT COUNT(*) FROM posts”)
SELECT COUNT(*) FROM posts en 1.4 ms (affichage console)

p=Post.count
SELECT count(*) AS count_all FROM "posts" en 1.4 ms (affichage console)

Bon, je pensais que ma méthode SQL était plus vite que celle d’ActiveRecords, j’crois bien que je me suis trompé!

Les avantages d’utilisé la méthode activeRecords count, c’est que l’on peut utiliser tous les arguments habituels, :conditions, :joins, :group, :from, :select, etc…. et puis en plus, c’est beaucoup plus court à écrire et on aime ça!

Dans le même ordre d’idée, on peut également se servir de la fonction Model.maximum(‘column’)

Exemple:

Post.maximum(‘count_votes’)
SELECT max("posts".count_votes) AS max_count_votes FROM "posts"

va nous retourner le maximum de votes enregistrer sur tous les posts!

Dans cette lignée on retrouve les fonctions Model.minimum, Model.average et Model.sum
Référence

Bookmark and Share
Posted in Dev, Web | Tagged , , | Leave a comment