Question

Pour une organisation plus facile, j'aimerais créer un espace de noms dans quelques dossiers sous mon répertoire / spec.Donc, plutôt que / spec / requests, j'aimerais utiliser / spec / another_directory / requests.

Cependant, lorsque j'exécute mes spécifications sous ces nouveaux répertoires d'espacement de noms, j'obtiens

NoMethodError:
       undefined method `whatever_path'

Il semble donc que mes routes ne sont plus correctement chargées.Si je déplace le fichier vers les spécifications / requêtes (sans l'espace de noms), tout va bien et le test est vert.

Je ne sais pas vraiment quel est le problème.Je demande «spec_helper» dans mes fichiers.J'ai aussi vu:

require File.dirname(__FILE__) + '/../../spec_helper'

et ses variations, mais je ne sais pas vraiment comment cela aide car il semble charger le spec_helper, mais pas les routes.Et pour rendre les choses encore plus amusantes, je recharge les routes avant chaque course dans le bloc Spork.pre_fork

Spork.each_run do
  load "#{Rails.root}/config/routes.rb"
end

mais j'obtiens toujours le message d'erreur indiquant que Spork est en cours d'exécution ou non.

Qu'est-ce que je fais de mal?

(rspec-rails 2.8.1)

Était-ce utile?

La solution

Je pense que c'est dû demander un exemple avant que le crochet ne soit déclenché.Si vous cherchez plus loin , vous pouvezcomprendre comment rspec-rails décide du type d'exemple qu'il exécute.

Je vous suggère d'utiliser le schéma spec/requests/another_directory ou vous pouvez essayer de reconfigurer Rspec un peu comme:

RSpec::configure do |config|
   config.include RSpec::Rails::RequestExampleGroup, :type => :request,
        :example_group => {:file_path => 'path/to/your/requests')}
end

Autres conseils

J'ai fini par faire:

config.include RSpec::Rails::RequestExampleGroup, :type => :request, 
  :example_group => { 
  :file_path => config.escaped_path(%w[spec (my|folder|names) requests])}

Mais, alors il n'obtient pas les méthodes Capybara, donc j'inclus à nouveau après le bloc de configuration ci-dessus

config.include Capybara::DSL, :type => :request
config.include Capybara::RSpecMatchers, :type => :request

Je voulais rendre le chemin plus élastique pour ne pas avoir à inclure chaque dossier «parent».J'ai essayé d'utiliser ** au lieu d'avoir à inclure (chaque | dossier), mais il ne se chargeait pas.J'ai ensuite essayé de définir le chemin directement en utilisant:

:file_path => "spec/../requests"

mais ensuite je perds la possibilité d'exécuter un seul fichier.

Quoi qu'il en soit, le code ci-dessus fonctionne, il vous suffit de diriger chacun des noms de votre dossier.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top