RSpec不在命名空间目录时加载路由

时间:2012-02-20 17:24:05

标签: ruby-on-rails ruby-on-rails-3 rspec rspec2 rspec-rails

为了便于组织,我想在my / spec目录下命名几个文件夹。因此,我不想/ spec / requests,而是使用/ 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 个答案:

答案 0 :(得分:2)

我认为,这是因为request example before hook未被解雇。如果查看further,您可以了解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

答案 1 :(得分:0)

我最终做了:

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

我想让路径更有弹性,所以我不必包含每个'parent'文件夹。我尝试使用**而不是必须包含(每个|文件夹),但它没有加载。然后我尝试使用以下方法直接设置路径:

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

然后我失去了运行单个文件的能力。

无论哪种方式,上面的代码都可以工作,只需管道你文件夹的每个名字。