RSpec ne charge pas les routes lors de l'espace de noms des répertoires
-
28-10-2019 - |
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)
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.