Integration tests with webrat and Rails3

953 views Asked by At

I'm upgrading a Rails 2.3.5 app to Rails 3.0.3. But my integration tests aren't working. I'm getting this error:

NoMethodError: undefined method `content_type' for nil:NilClass

The line to blame is

assert_select "input#artist.title.unsolved", 1

My test_helper.rb for webrat looks likes this:

require "webrat"
require 'webrat/core/matchers'
include Webrat::Methods

Webrat.configure do |config|
  config.mode = :rack
end

I'm using shoulda 2.11.3 and webrat 0.7.3 for the testing. I've read, that webrat and shoulda are compatible with Rails3.

Anyone an idea how to fix this?

Thanks! tux

ADDITION:

It seems, that the NoMethodError appears from shoulda, not from Webrat, as mentioned in the title. Here is the trace:

NoMethodError: undefined method `content_type' for nil:NilClass
    /Users/23tux/.rvm/gems/ruby-1.9.2-p136@rails3/gems/activesupport-3.0.3/lib/active_support/whiny_nil.rb:48:in `method_missing'
    /Users/23tux/.rvm/gems/ruby-1.9.2-p136@rails3/gems/actionpack-3.0.3/lib/action_dispatch/testing/assertions/selector.rb:605:in `response_from_page_or_rjs'
    /Users/23tux/.rvm/gems/ruby-1.9.2-p136@rails3/gems/actionpack-3.0.3/lib/action_dispatch/testing/assertions/selector.rb:213:in `assert_select'
    test/integration/user_integration_test.rb:52:in `block (3 levels) in <class:UserIntegrationTest>'
    /Users/23tux/.rvm/gems/ruby-1.9.2-p136@rails3/gems/shoulda-context-1.0.0.beta1/lib/shoulda/context/context.rb:412:in `call'
    /Users/23tux/.rvm/gems/ruby-1.9.2-p136@rails3/gems/shoulda-context-1.0.0.beta1/lib/shoulda/context/context.rb:412:in `block in run_current_setup_blocks'
    /Users/23tux/.rvm/gems/ruby-1.9.2-p136@rails3/gems/shoulda-context-1.0.0.beta1/lib/shoulda/context/context.rb:411:in `each'
    /Users/23tux/.rvm/gems/ruby-1.9.2-p136@rails3/gems/shoulda-context-1.0.0.beta1/lib/shoulda/context/context.rb:411:in `run_current_setup_blocks'
    /Users/23tux/.rvm/gems/ruby-1.9.2-p136@rails3/gems/shoulda-context-1.0.0.beta1/lib/shoulda/context/context.rb:393:in `block in create_test_from_should_hash'

And here is the whole block context around the assert_select:

class SongIntegrationTest < ActionController::IntegrationTest
  context "a visitor" do
    context "solving a song" do
      setup do
        @song = Song.make
        visit song_path(@song)
      end

      should "have two guess fields" do
        assert_select "input#artist.title.unsolved", 1
        assert_select "input#title.title.unsolved", 1
      end

Maybe the assert_select isn't longer available in Rails 3 with Shoulda. Hope someone can help me! thx!

1

There are 1 answers

1
abdollar On BEST ANSWER

There is a fork of webrat that works with rails3 at https://github.com/joakimk/webrat. At some point it should get pulled into the main branch. rails 2.3 is still very popular at this time.