RSpec не загружает маршруты, когда каталоги пространств имен - PullRequest
1 голос
/ 20 февраля 2012

Чтобы упростить организацию, я бы хотел разместить несколько папок в каталоге / spec. Поэтому вместо / spec / запросы я хотел бы использовать /spec/another_directory/requests.

Однако, когда я запускаю свои спецификации в этих новых каталогах с пространством имен, я получаю

NoMethodError:
       undefined method `whatever_path'

Итак, похоже, что мои маршруты больше не загружаются должным образом. Если я перенесу файл обратно в спецификацию / запросы (без пространства имен), все будет хорошо, и тест будет зеленым.

Не совсем уверен, в чем проблема. Я требую 'spec_helper' в моих файлах. Я также видел:

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

и его вариации, но я не совсем уверен, как это помогает, потому что кажется, что он загружает spec_helper, а не маршруты. И чтобы еще больше повеселиться, я перезагружаю маршруты перед каждым запуском в блоке Spork.pre_fork

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

но я все еще получаю сообщение об ошибке, независимо от того, запущен Spork или нет.

Что я делаю не так?

(rspec-rails 2.8.1)

Ответы [ 2 ]

2 голосов
/ 20 февраля 2012

Я думаю, это из-за примера запроса до того, как хук не будет запущен. Если вы посмотрите дальше , вы сможете понять, как rspec-rails решает, какой тип примера он запускает.

Я предлагаю вам использовать spec/requests/another_directory схему или вы можете попытаться перенастроить Rspec примерно так:

RSpec::configure do |config|
   config.include RSpec::Rails::RequestExampleGroup, :type => :request,
        :example_group => {:file_path => 'path/to/your/requests')}
end
0 голосов
/ 21 февраля 2012

Я закончил тем, что сделал:

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

Но тогда он не получает методы Capybara, поэтому я снова включаю после вышеприведенного блока конфигурации

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

, который я хотел сделатьпуть более эластичный, поэтому мне не нужно включать каждую «родительскую» папку.Я попытался использовать ** вместо того, чтобы включать (каждая | папка), но он не загружался.Затем я попытался установить путь напрямую, используя:

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

, но затем я потерял способность запускать один файл.

В любом случае приведенный выше код работает, просто нужно передать каждый изимена вашей папки.

...