开发者

Using Capybara to test pure JavaScript application

开发者 https://www.devze.com 2023-04-13 05:04 出处:网络
I\'m having some problems using Sinatra with Capybara. I want to test a pure javascript application. It\'s just a plain index.html that is being served by Sinatra.

I'm having some problems using Sinatra with Capybara.

I want to test a pure javascript application. It's just a plain index.html that is being served by Sinatra.

require "sinatra"

get "/" do
  File.read("public/index.html")
end

Let's say for example that I want to test this code.

$("a.link").click(function(){
  $(this).replaceWith("New String");
});

<a href="#link" class="link">Click me!</a>

Then the test would look something like this.

describe "requests", js: true do    
  it "should display a message" do
    visit "/"
    click_link "Click me!"
    page.should have_content("New String")
  end
end

The problem is that nothing happens. According to Ryan Bates screencast Firefox should start and run the tes开发者_如何学编程t if js: true is added to the describe block.

Here is my spec_helper file.

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

Here is the output when running 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

I created an complete example project on Github that can be found here: https://github.com/oleander/capybara-js-fails

Anyone knows why it fails?


Here is the original answer from Jonas Nicklas.

You need to require 'capybara/rspec' and set :type => :request.
See the Capybara README section on "Using Capybara with RSpec".
/Jonas

Here is a working example on Github.

0

精彩评论

暂无评论...
验证码 换一张
取 消