Shiny happy people coding

Codons avec le sourire

Loader toutes les fixtures avec les Story de Rspec

| Comments

Dans un article précédent, j’ai décrit comment utiliser les stories de Rspec avec Rails. Mais j’ai indiqué qu’il n’y avait pas la possibilité d’utiliser la méthode fixtures directement. Mais ce n’est pas pour ça qu’on ne peux pas loader les fixtures. Je vais vous expliquer comment faire.

Définir où se trouve les fixtures.

Dans le helper.rb, on peux définir où se trouve le dossier contenant les fixtures : ENV[“RAILS_ENV”] = “test” require File.expand_path(File.dirname(__FILE__) + “/../config/environment”) require ‘spec/rails/story_adapter’ Spec::Runner.configure do |config| # If you’re not using ActiveRecord you should remove these # lines, delete config/database.yml and disable :active_record # in your config/boot.rb config.use_transactional_fixtures = true config.use_instantiated_fixtures = false config.fixture_path = RAILS_ROOT + ‘/spec/fixtures/’ end

La configuration fixture_path permet ainsi de définir où se trouve le dossier contenant les fixtures. Dans mon cas c’est le dossier de fixtures de Rspec.

Définir des steps qui load les fixtures

On peux faire une étape qui permette de loader toutes les fixtures :

Given “load all fixtures” do [“galleries”, “pictures”, “thumbnails”, “users”, “settings”].each { |fixture| Fixtures.create_fixtures(Test::Unit::TestCase.fixture_path, fixture) } end

En appelant “load all fixtures” on chargera ainsi toutes les fixtures définis dans la liste. On les appelles de la même manière qu’avec la méthode fixtures

On peux aussi faire une steps qui ne load qu’une fixtures en particulier

Given “load fixtures ‘$fixture’” do |fixtures| Fixtures.create_fixtures(Test::Unit::TestCase.fixture_path, fixtures) end

Appeler les étapes dans son histoire

Une fois ces étapes définis on peux ainsi facilement les utiliser dans ses stories en plain-text.

Story: Mon Histoire Scenario: Une beau scénario Given load all fixtures When we go to ‘/’ Then we are redirect to ‘/login’ Scenario: Un autre scénario Given load fixtures ‘galleries’ And load fixtures ‘users’ When we go to ‘/’ Then we are redirect to ‘/login’