Rails + Capybara + poltergeist ArgumentError:rack-test需要一个机架应用程序,但没有给出

Pro*_*ver 10 rspec ruby-on-rails capybara phantomjs ruby-on-rails-4

我刚刚开始玩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
Run Code Online (Sandbox Code Playgroud)

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

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

这让我感到困惑.

我在stackoverflow上查看了几个类似的线程,在某些情况下,错误是缺少config.include specyhel.rb中的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
Run Code Online (Sandbox Code Playgroud)

完整版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
Run Code Online (Sandbox Code Playgroud)

思考?

Pro*_*ver 13

  • 更新

根据报告(参见评论)不再需要此解决方法,但我还没有检查过.


找到解决方法..

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

#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
Run Code Online (Sandbox Code Playgroud)

更新1

为了修复错误:

 Failure/Error: visit '/item/new'
 ArgumentError: rack-test requires a rack application, but none was given
Run Code Online (Sandbox Code Playgroud)

我将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
Run Code Online (Sandbox Code Playgroud)

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

Capybara.configure do |c|
  c.javascript_driver = :poltergeist
  c.default_driver = :poltergeist
end
Run Code Online (Sandbox Code Playgroud)

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

错误

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

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