Langages/Ruby/Rails/Tests/DRbServer/Spork

Un article de Agora2ia.


Sommaire

Présentation

En tant que DRb Server, Spork permet d'être plus rapide dans les exécutions successives d'une batterie de tests, en se connectant à un serveur qui initialise qu'une seule fois l'environnement.

A utiliser avec guard ou autotest.


Voici les délais sur mon projet actuel :

  • Avant:
    • rspec : 12,98 s.
    • time rspec : real (39.759s) - user (21.925s) - sys (2.399s)
  • Après:

Configuration

# /Gemfile
# +++
group :development, :test do
   // ...
   gem 'spork', '0.9.2'
   // ...
end

 > spork --bootstrap

Cela complète le fichier /spec/spec_helper.rb.

Avec un bloc d'initialisation joué une unique fois au tout début (équivalent au @BeforeClass de JUnit) :

Spork.prefork do
   # ...
end

Avec un bloc d'initialisation joué avant chaque exécution (équivalent au @Before de JUnit) :

Spork.each_run do
   # ...
end

Bien avoir à l'esprit que plus ce second bloc est long, plus cela va ralentir le jeu des tests.


Sur un projet existant

$ bundle exec rails g cucumber:install --spork


    conflict  config/cucumber.yml
Overwrite /Users/jacques/Dropbox/-work/projects/-github/glowcon/glowcon/config/cucumber.yml? (enter "h" for help) [Ynaqdh] Y
       force  config/cucumber.yml
   identical  script/cucumber
       chmod  script/cucumber
       exist  features/step_definitions
       exist  features/support
    conflict  features/support/env.rb
Overwrite /Users/jacques/Dropbox/-work/projects/-github/glowcon/glowcon/features/support/env.rb? (enter "h" for help) [Ynaqdh] Y
       force  features/support/env.rb
       exist  lib/tasks
   identical  lib/tasks/cucumber.rake


Utilisation

Dans une nouvelle fenêtre du terminal :

> spork


Lorsque vous exécuter des tests configurer pour fonctionner avec un DRb Server mais sans avoir lancé celui-ci, vous obtenez le message d'erreur suivant :

No DRb server is urnning Running in local process instead...