我在使用Sinatra和Capybara时遇到了一些问题。
我想测试一个纯粹的JavaScript应用程序。它只是Sinatra服务的普通index.html。
require "sinatra"
get "/" do
File.read("public/index.html")
end
比方说,我想测试一下这段代码。
$("a.link").click(function(){
$(this).replaceWith("New String");
});
<a href="#link" class="link">Click me!</a>
然后测试会看起来像这样。
describe "requests", js: true do
it "should display a message" do
visit "/"
click_link "Click me!"
page.should have_content("New String")
end
end
问题是没有任何反应。根据{{3}},如果将js: true
添加到describe
块,则Firefox应启动并运行测试。
这是我的spec_helper
文件。
require "rspec"
require "capybara"
require "capybara/dsl"
Capybara.javascript_driver = :selenium
require_relative "./../server"
Capybara.app = Sinatra::Application
Capybara.javascript_driver = :selenium
Capybara.default_wait_time = 10
RSpec.configure do |config|
config.mock_with :rspec
config.include Capybara
end
这是运行rspec rspec/request_spec.rb
时的输出。
requests
should display a message (FAILED - 1)
Failures:
1) requests should display a message
Failure/Error: page.should have_content("New String")
expected #has_content?("New String") to return true, got false
# ./spec/request_spec.rb:5:in `block (2 levels) in <top (required)>'
Finished in 4.38 seconds
1 example, 1 failure
Failed examples:
rspec ./spec/request_spec.rb:2 # requests should display a message
我在Github上创建了一个完整的示例项目,可以在这里找到: Ryan Bates screencast
任何人都知道它失败的原因?
答案 0 :(得分:4)
Here是Jonas Nicklas的原始答案。
你需要'capybara / rspec'并设置:type =&gt; :请求
请参阅“使用带RSpec的Capybara”的Capybara README部分 /乔纳斯
Here是Github的一个工作示例。