【问题标题】:Rails+Capybara+poltergeist ArgumentError: rack-test requires a rack application, but none was givenRails+Capybara+poltergeist ArgumentError: rack-test requires a rack application, 但没有给出
【发布时间】:2014-09-14 07:58:34
【问题描述】:

我刚开始玩 Capycabra+poltergeist 并在执行我的 Capy 测试后rspec ./spec/features/test_spec.rb 我收到以下错误:

 Failure/Error: visit '/item/new'
 ArgumentError: rack-test requires a rack application, but none was given

我还有一些标准的 rspec 测试,每当我尝试执行所有测试时,rspec 测试都会成功通过,但只有 capy 测试失败并出现奇怪的错误

ActionView::Template::Error: couldn't find file 'jquery.min' (in app/assets/javascripts/application.js:13)

这让我感到困惑。

我在 stackoverflow 上查看了几个类似的线程,在某些情况下,错误是关于 spec_helper.rb 中缺少 config.include Capybara::DSL 或测试位置不正确。我进行了适当的更改,但它不起作用,错误仍然相同。

我的 spec_helper.rb 文件

require 'capybara'
require 'capybara/dsl'
require 'capybara/poltergeist'

Capybara.javascript_driver = :poltergeist

RSpec.configure do |config|
  config.include Capybara::DSL
end

spec_helper 完整版:http://pastebin.com/qkANfu39

测试文件:

#spec/features/test_spec.rb

require 'spec_helper'
describe 'accessibility of webpage' do
  it 'should access web page' do
    visit '/item/new'
    expect(page).to have_content("Something")
  end

end

想法?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 rspec capybara phantomjs


    【解决方案1】:
    • 更新

    根据报告不再需要这种解决方法(见 cmets),但我还没有检查过。


    找到解决方法..

    我必须指定应用程序主机 url 和默认驱动程序..

    #spec/spec_helper.rb
    
    require 'capybara'
    require 'database_cleaner'
    require 'capybara/dsl'
    require 'capybara/poltergeist'
    
    
    Capybara.configure do |c|
      c.javascript_driver = :poltergeist
      c.default_driver = :poltergeist
      c.app_host = "http://localhost:3000"
    end
    

    更新 1

    为了修复错误:

     Failure/Error: visit '/item/new'
     ArgumentError: rack-test requires a rack application, but none was given
    

    我将 rails_helper 文件包含在我的 Capy 测试中。测试的最终版本:

    require 'rails_helper'
    require 'spec_helper'
    
    describe 'accessibility of webpage' do
      it 'should access web page' do
        visit '/item/new'
        expect(page).to have_content I18n.t("form_input.item.item_s")
      end
    end
    

    之后由于某种原因不再需要指定的 app_host url,并且可以从 spec_helper 帮助文件中删除它。最终版本:

    Capybara.configure do |c|
      c.javascript_driver = :poltergeist
      c.default_driver = :poltergeist
    end
    

    spec_helper.rb完整版http://pastebin.com/DKgF1uQA

    错误

    ActionView::Template::Error: couldn't find file 'jquery.min' (in app/assets/javascripts/application.js:13)
    

    发生是因为 gem 'jquery-rails' 在我的 Gemfile 的测试范围内不可用,它仅在 :development & :production 环境中可用。我将 gem 'jquery-rails' 移到了全局范围内。 Gemfile 完整版:http://pastebin.com/dt4KrHGG

    【讨论】:

    • 使用最新版本的 cabybara,开箱即用。我关注了这篇文章,但无法让它工作,然后我删除了我从这篇文章中复制的代码,然后一切都开始工作了。
    • @ProblemSlover:您能否编辑以包含 rails_helper.rb 的内容?也就是说,如果您仍然可以从您提出这个问题时所处的状态访问源历史记录?
    猜你喜欢
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多