使用Poltergeist错误膨胀比利:“机架测试需要机架应用,但没有给出”

时间:2017-07-27 22:37:34

标签: ruby-on-rails rspec capybara poltergeist

使用Puffing Billy instructions for rspec with capybara我创建了一个简单的测试来使用<form method="post"> <div class="form-container"> <p>Fill The Form Below</p> <p id="helperNote">Helper note Appears Here</p> <p> <label>Email :</label> <input type="email" name="email" id="email"> </p> <p> <label>Username :</label> <input type="text" name="username" id="username"> </p> <p> <label>Name :</label> <input type="text" name="Name" id="Name"> </p> <p> <label>Age :</label> <input type="number" name="age" id="age"> </p> <p> <label>City :</label> <input type="text" name="City" id="City"> </p> <p> <input type="submit" name="submit" value="sign-up"> </p> </div> </form>驱动程序存根请求导致错误:

:poltergeist_billy

使用此代码:

规格/ spec_helper.rb

ArgumentError:
        rack-test requires a rack application, but none was given
      # /home/resrev/.rvm/gems/ruby-2.3.1/gems/capybara-2.4.4/lib/capybara/rack_test/driver.rb:16:in `initialize'
      # /home/resrev/.rvm/gems/ruby-2.3.1/gems/capybara-2.4.4/lib/capybara.rb:372:in `new'
      # /home/resrev/.rvm/gems/ruby-2.3.1/gems/capybara-2.4.4/lib/capybara.rb:372:in `block in <top (required)>'
      # /home/resrev/.rvm/gems/ruby-2.3.1/gems/capybara-2.4.4/lib/capybara/session.rb:79:in `driver'
      # /home/resrev/.rvm/gems/ruby-2.3.1/gems/capybara-2.4.4/lib/capybara/session.rb:227:in `visit'
      # /home/resrev/.rvm/gems/ruby-2.3.1/gems/capybara-2.4.4/lib/capybara/dsl.rb:51:in `block (2 levels) in <module:DSL>'
      # ./spec/scraypa_spec.rb:52:in `block (4 levels) in <top (required)>'

规格/ my_spec.rb:

require "bundler/setup"
require "scraypa"
require 'billy/capybara/rspec'

RSpec.configure do |config|
  # Enable flags like --only-failures and --next-failure
  config.example_status_persistence_file_path = ".rspec_status"

  config.expect_with :rspec do |c|
    c.syntax = :expect
  end

  config.include Capybara::DSL
end

在挖掘时,我找到了一个使用it "should utilise capybara to download web content" do #Capybara.current_driver = :poltergeist_billy Capybara.javascript_driver = :poltergeist_billy proxy.stub('http://www.google.com/') .and_return(:text => "test response") visit "http://www.google.com/" expect(page.text).to eq('test response') end 的示例(我在上面的测试中已经注释掉了),如果我取消注释该代码,那么我会收到此错误:

Capybara.current_driver = :poltergeist_billy

我不知道从这里去哪里或者我做错了什么,有什么想法吗?感谢。

1 个答案:

答案 0 :(得分:1)

这里的错误很多,所以让我们从头开始

  1. 您的spec_helper.rb或rails_helper.rb中没有require capybara/rails - https://github.com/teamcapybara/capybara#setup - 这意味着Capybara.app无法设置,这就是您和&# #39;进行机架测试需要机架应用程序&#34; - 当然,你真的不想使用rack-test驱动程序来进行#3将要处理的当前测试。

  2. Capybara已将Capybara :: DSL纳入功能规格,因此请使用功能规格,并从上面显示的RSpec配置中删除include Capybara::DSL。这需要将您的spec文件放入spec/features/my_spec.rb并启用RSpec配置以按目录确定测试类型,或手动指定测试是功能规范

    feature "should utilise capybara to download web content" do
      ...
    end
    

    it "should utilise capybara to download web content", type: :feature do
      ...
    end
    
  3. 您的测试实际上是使用rack_test驱动程序,而不是poltergeist-billy驱动程序。这是因为您在测试中设置了Capybara.javascript_driver。需要在测试之前设置它,然后用元数据标记测试以告诉它使用特定的驱动程序。这里有两个选项,您可以在spec_helper.rb中设置Capybara.javascript_driver = :poltergeist_billy,然后指定:js元数据

     feature "should utilise capybara to download web content", :js do
       ...
     end
    

    或指定:driver元数据以确定用于给定测试的驱动程序

    feature "should utilise capybara to download web content", driver: :poltergeist_billy do 
      ... 
    end
    
  4. 当指定使用与billy的poltergeist时,你需要在路径中安装PhantomJS(Poltergeist需要)。如果在自制软件中使用OSX,您可以brew install phantomjs - 在其他系统上,您需要下载最新版本的PhantomJS并将其放在PATH中的某个位置

  5. expect(page.text).to eq('test response')。这是使用Capybara进行文本匹配的一种可怕方式。 eq没有等待/重试行为,因为当Capybaras方法返回时,操作无法保证完成将导致片状测试。相反,使用Capybara提供的匹配器。如果您对子字符串匹配没问题

    expect(page).to have_text('test_response')

    如果需要完全匹配

    expect(page).to have_text('test_response', exact: true)