【发布时间】:2011-12-08 22:29:11
【问题描述】:
我在使用 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
问题是什么都没有发生。根据Ryan Bates screencast,如果将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 上创建了一个完整示例项目,可以在这里找到: https://github.com/oleander/capybara-js-fails
有人知道为什么会失败吗?
【问题讨论】:
标签: ruby selenium rspec sinatra capybara