使用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
我不知道从这里去哪里或者我做错了什么,有什么想法吗?感谢。
答案 0 :(得分:1)
这里的错误很多,所以让我们从头开始
您的spec_helper.rb或rails_helper.rb中没有require capybara/rails
- https://github.com/teamcapybara/capybara#setup - 这意味着Capybara.app无法设置,这就是您和&# #39;进行机架测试需要机架应用程序&#34; - 当然,你真的不想使用rack-test
驱动程序来进行#3将要处理的当前测试。
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
您的测试实际上是使用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
当指定使用与billy的poltergeist时,你需要在路径中安装PhantomJS(Poltergeist需要)。如果在自制软件中使用OSX,您可以brew install phantomjs
- 在其他系统上,您需要下载最新版本的PhantomJS并将其放在PATH中的某个位置
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)