Problem with unexpected nil in assert_select

I am running cucumber features against a Rails 3 branch and I have this
step definition (which works fine in Rails-2.3.8):

When /should see (?:an|the) authentication request message/ do

puts(“This is the response: #{response.body}”)

selector = “#authentication_request
expected = true
message = ‘Missing authentication_request selector’

assert_select(selector, expected, message)

end

Running the cucumber feature that invokes this step generates the
following error:

  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:inresponse_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:56

The response.body inside the step definition contains exactly what I
expect:

To Proceed Please Authenticate Your Identity

What do I need to change to get this test to work in Rails-3.0.0?

James B. wrote:

Running the cucumber feature that invokes this step generates the
following error:

  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:inresponse_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:56

The response.body inside the step definition contains exactly what I
expect:

To Proceed Please Authenticate Your Identity

What do I need to change to get this test to work in Rails-3.0.0?

Is there some place that lists the valid syntax for a css selector as
used by ActionDispatch? I can only surmise that the argument value is
invalid for some reason.

James B. wrote:

The response.body inside the step definition contains exactly what I
expect:

To Proceed Please Authenticate Your Identity

What do I need to change to get this test to work in Rails-3.0.0?

Is there some place that lists the valid syntax for a css selector as
used by ActionDispatch? I can only surmise that the argument value is
invalid for some reason.

I removed webrat-0.7.2-beta and tried again. This eliminated the nil
object error, so I infer that webrat caused this issue. However, the
test still fails. Given this html:

To Proceed Please Authenticate Your Identity

and this assert_selector statement:

expected = “#authorization_request
message = ‘Missing authentication_request selector’

assert_select(expected, message)

I receive this error:

Expected at least 1 element matching “#authorization_request”, found 0.
is not true. (Test::Unit::AssertionFailedError)
/home/byrnejb/.rvm/rubies/ruby-1.8.7-p302/lib/ruby/1.8/test/unit/assertions.rb:48:in
`assert_block’

As far as I can tell from my references, #authorization_request is a
valid css selector. So, why is this test failing in Rails-3?

I have determined that this is indeed a webrat problem. Evidently,
webrat overrides assert_select in such a way as to break the Rails-3.0.0
implementation.