
assert_select not working with Rails-3.0.0 due to webrat
Reported by James B. Byrne | September 10th, 2010 @ 03:08 PM
Given the following html:
To Proceed Please Authenticate Your Identity
And the following code:
selector = "#authentication_request" expected = true message = 'Missing authentication_request selector' assert_select(selector, expected, message)
With Rails-2.3.8 and Webrat-0.7.1 this test passes.
With Rails-3.0.0 and without webrat installed this test
passes.
With Rails-3.0.0 and Webrat-0.7.1 or 0.7.2-beta it fails with
this:
undefined method `content_type' for nil:NilClass (NoMethodError) /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/activesupport-3.0.0/lib/active_support/whiny_nil.rb:48:in `method_missing' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/actionpack-3.0.0/lib/action_dispatch/testing/assertions/selector.rb:605:in `response_from_page_or_rjs' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/actionpack-3.0.0/lib/action_dispatch/testing/assertions/selector.rb:213:in `assert_select' /home/byrnejb/Software/Development/Projects/proforma.git/features/app/models/users/step_definitions/user_authentication_steps.rb:64 /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/core_ext/instance_exec.rb:48:in `instance_exec' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/core_ext/instance_exec.rb:48:in `cucumber_instance_exec' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/core_ext/instance_exec.rb:69:in `cucumber_run_with_backtrace_filtering' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/core_ext/instance_exec.rb:36:in `cucumber_instance_exec' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/rb_support/rb_step_definition.rb:54:in `invoke' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/step_match.rb:26:in `invoke' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/step_mother.rb:203:in `invoke' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/rb_support/rb_world.rb:22:in `Then' /home/byrnejb/Software/Development/Projects/proforma.git/features/app/models/users/step_definitions/user_authentication_steps.rb:94 /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/core_ext/instance_exec.rb:48:in `instance_exec' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/core_ext/instance_exec.rb:48:in `cucumber_instance_exec' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/core_ext/instance_exec.rb:69:in `cucumber_run_with_backtrace_filtering' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/core_ext/instance_exec.rb:36:in `cucumber_instance_exec' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/rb_support/rb_step_definition.rb:54:in `invoke' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/step_match.rb:26:in `invoke' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/ast/step_invocation.rb:62:in `invoke' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/ast/step_invocation.rb:41:in `accept' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/ast/tree_walker.rb:99:in `visit_step' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/ast/tree_walker.rb:164:in `broadcast' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/ast/tree_walker.rb:98:in `visit_step' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/ast/step_collection.rb:15:in `accept' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/ast/step_collection.rb:14:in `each' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/ast/step_collection.rb:14:in `accept' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/ast/tree_walker.rb:93:in `visit_steps' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/ast/tree_walker.rb:164:in `broadcast' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/ast/tree_walker.rb:92:in `visit_steps' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/ast/scenario.rb:53:in `accept' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/step_mother.rb:327:in `with_hooks' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/step_mother.rb:348:in `before_and_after' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/step_mother.rb:326:in `with_hooks' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/step_mother.rb:337:in `call' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/step_mother.rb:337:in `around' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/language_support/language_methods.rb:13:in `around' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/language_support/language_methods.rb:95:in `call' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/language_support/language_methods.rb:95:in `execute_around' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/language_support/language_methods.rb:12:in `around' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/step_mother.rb:336:in `around' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/step_mother.rb:334:in `call' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/step_mother.rb:334:in `around' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/step_mother.rb:325:in `with_hooks' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/ast/scenario.rb:51:in `accept' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/ast/scenario.rb:106:in `with_visitor' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/ast/scenario.rb:45:in `accept' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/ast/tree_walker.rb:51:in `visit_feature_element' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/ast/tree_walker.rb:164:in `broadcast' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/ast/tree_walker.rb:50:in `visit_feature_element' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/ast/feature.rb:35:in `accept' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/ast/feature.rb:34:in `each' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/ast/feature.rb:34:in `accept' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/ast/tree_walker.rb:20:in `visit_feature' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/ast/tree_walker.rb:164:in `broadcast' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/ast/tree_walker.rb:19:in `visit_feature' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/ast/features.rb:29:in `accept' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/ast/features.rb:17:in `each' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/ast/features.rb:17:in `each' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/ast/features.rb:28:in `accept' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/ast/tree_walker.rb:14:in `visit_features' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/ast/tree_walker.rb:164:in `broadcast' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/ast/tree_walker.rb:13:in `visit_features' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/cli/main.rb:61:in `execute!' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/../lib/cucumber/cli/main.rb:25:in `execute' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/gems/cucumber-0.8.5/bin/cucumber:8 /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/bin/cucumber:19:in `load' /home/byrnejb/.rvm/gems/ruby-1.8.7-p302/bin/cucumber:19 features/app/models/users/admin_user.feature:77:in `And the user named "admin" authenticates'
I infer that Webrat is overriding assert_select in some way but I have no clue as to where, how or why.
Comments and changes to this ticket
-
Sven Fuchs December 5th, 2010 @ 04:26 PM
This fixes the issue meanwhile for Cucumber.
module Webrat::AssertSelectFix def assert_select(*args, &block) @response = response super end end World(Webrat::AssertSelectFix)
-
Murray Steele February 10th, 2011 @ 11:15 AM
I found that I also had to add some resetting of the @response and @html_document variables (otherwise subsequent requests would assert_select on the page content from the page the first assert_select was called on).
So I've augmented Sven's suggestion as follows:
module Webrat::AssertSelectFix def assert_select(*args, &block) @response = response super end %w(get post put head delete xml_http_request xhr get_via_redirect post_via_redirect).each do |method| define_method(method) do |*args| # reset the html_document and response variables @html_document = nil @response = nil super end end end World(Webrat::AssertSelectFix)
Please Sign in or create a free account to add a new ticket.
With your very own profile, you can contribute to projects, track your activity, watch tickets, receive and update tickets through your email and much more.
Create your profile
Help contribute to this project by taking a few moments to create your personal profile. Create your profile ยป
Ruby Acceptance Testing for Web applications.
People watching this ticket
- Nobody is watching this ticket.