为了便于组织,我想在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)
答案 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"
然后我失去了运行单个文件的能力。
无论哪种方式,上面的代码都可以工作,只需管道你文件夹的每个名字。