Running Capybara without a rack causes errors when using URL parameters

Here is my setup based on this recommendation: How to get Cucumber / Capybara / Mechanize to work with an external site without rails

It works until I add parameters to the URL. Any recommendations for resolving this issue?

require 'rspec' require 'capybara/rspec' require 'capybara/dsl' @test_url = "test" RSpec.configure do |config| config.include Capybara::DSL end Capybara.configure do |config| config.run_server = false config.current_driver = :selenium config.app = "fake app name" config.app_host = "http://site.com/#{@test_url}" end 

This works great:

 describe "the page, without URL parameters" do it "shows the regular form" do visit "/registration.aspx" page.should have_content "YES" end end 

But this:

 describe "the page, when not fully pre-filled" do it "shows the regular form if only passed the attendance" do visit "/registration.aspx?r=y" page.should have_content "YES" end it "shows the regular form if only passed the attendance" do visit "/registration.aspx?f=Jim" page.should have_content "YES" end end 

leads to

 ....FF Failures: 1) the page, when not fully pre-filled shows the regular form if only passed the attendance Failure/Error: visit "/registration.aspx?r=y" NoMethodError: undefined method `call' for "fake app name":String # ./conf_spec.rb:39:in `block (2 levels) in <top (required)>' 2) the page, when not fully pre-filled shows the regular form if only passed the attendance Failure/Error: visit "/registration.aspx?f=Jim" NoMethodError: undefined method `call' for "fake app name":String # ./conf_spec.rb:44:in `block (2 levels) in <top (required)>' 
+4
source share
3 answers

You can set only one of app and app_host . Therefore, you must remove config.app from the configuration.

You should also set default_driver instead of current_driver .

As shown in my answer in a related question, the working configuration is:

 Capybara.configure do |config| config.run_server = false config.default_driver = :selenium config.app_host = 'https://www.google.com' # change url end 
+15
source

If you specify app_host instead of using the rack, you need to specify default_driver instead of current_driver . For instance:

 Capybara.run_server = false Capybara.default_driver = :selenium Capybara.app_host = 'https://www.google.com' instead of Capybara.run_server = false Capybara.current_driver = :selenium Capybara.app_host = 'https://www.google.com' 
+3
source

Assuming you have an application other than Rack, and follow the instructions in the second answer, which refers to https://groups.google.com/forum/#!msg/ruby-capybara/9UFnfrc1S-s/TfQO5uBv7gMJ , it seems to me that the hack / workaround is only valid for the simplest use cases, namely when you are not trying to pass parameters to the application. I assume that either Rack or Capybara tries to call your application to pass parameters, and it does not work, because the application is just a String , not a call capable object.

0
source

Source: https://habr.com/ru/post/1491549/


All Articles