如何使用Capybara测试Rack :: Directory提供静态文件?或如何使用Capybara测试机架中间件?

时间:2013-06-11 14:31:42

标签: ruby-on-rails sinatra cucumber capybara rack

我正在使用Rack :: Directory.new将公用文件夹中的目录直接映射到网站并提供静态文件。

我的config.ru包含:

map '/pdfs/' do
  run Rack::Directory.new('./public/resources/pdfs')
end
require './app/main.rb'
   run MainSinatra

我正在使用Sinatra App运行应用程序的其余部分并使用 cucumber-sinatra 预生成一些文件。

当我尝试在路径文件中加载pdfs的路径时,我收到错误 特征/支持/ paths.rb:

def path_to(page_name)
  case page_name    
  when /dias_all/
    '/pdfs'
  ...
end

然后在我的步骤文件中输入

visit dias_all

我收到404错误。

我尝试将其添加到features / support / env.rb文件中,但仍然出现错误:

  class MainSinatraWorld
  ...
    include Rack::Test::Methods
    def app
      Rack::Directory.new('./public/resources/pdfs')
    end
  end

然后将步骤文件访问更改为get,但仍然出现错误。

 get('/pdfs/dias')

错误:

  No response yet. Request a page first. (Rack::Test::Error)

如何通过Capybara或Cucumber测试文件夹的内容?

1 个答案:

答案 0 :(得分:1)

我能够通过改变env.rb中的这一行来弄清楚如何解决这个问题:

Capybara.app = MainSinatra

到:

Capybara.app = eval "Rack::Builder.new {( " + File.read(File.dirname(__FILE__) +
'/../../config.ru') + "\n )}"

这将从机架文件(config.ru)运行应用程序并加载所有未加载的中间件。

我在blog找到了答案。