[Rails] Can't get controller test working with RSpec 2 and edge Rails 3

Not sure if this is a Rails 3 issue or an RSpec 2 issue, but I can’t
seem to
get a standard controller test working - it seems that the ‘get’ method
can’t be found.

I have a controller test that looks like this (named
“discrepancies_controller_spec.rb” in spec/controllers directory):

require ‘spec_helper’

describe DiscrepanciesController do
before :each do
Discrepancy.delete_all
end

it “resolves a discrepancy” do
discrepancy = Discrepancy.create(:my_number=>“12345”, :status=>“Open”)

get :resolve, :id => discrepancy.id
retrieved_discrepancy = Discrepancy.find_by_my_number(“12345”)
retrieved_discrepancy.status.should == “Resolved”
end
end

(Yes, I’m aware of the security implications of modifying data with an
HTTP/GET - that’s a separate issue…)
When I run it with rake, I get the following error:

  1. DiscrepanciesController resolves a discrepancy
    Failure/Error: Unable to find C to read failed line
    undefined method `get’ for
    #<RSpec::Core::ExampleGroup::Nested_1:0xc9170d0 @__memoized={}>

    ./spec/controllers/discrepancies_controller_spec.rb:38* (ignore

the
line number, commented out code was removed from the sample)*
#
C:/Users/Patrick_Gannon/.bundle/ruby/1.8/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/activesupport/lib/active_support/dependencies.rb:212:in
inject' # C:/Ruby187/bin/rake:19:inload’
# C:/Ruby187/bin/rake:19

I can manage to test the controller action by instantiating the
controller
myself and calling the controller action directly, and it works, but its
ugly because I have to mock out things like ‘respond_to’ and ‘params’.

Other pertinent information: I am running Windows 7 32-bit, Ruby 1.8.7
(2010-01-10 patchlevel 249) [i386-wingw32], edge Rails 3 and
MongoDB/MongoMapper. Here is my list of installed gems (via ‘bundle
gem’ -
all my installed gems were installed by Bundler)

  • abstract (1.0.0)
  • actionmailer (3.0.0.beta4)
  • actionpack (3.0.0.beta4)
  • activemodel (3.0.0.beta4)
  • activerecord (3.0.0.beta4)
  • activeresource (3.0.0.beta4)
  • activesupport (3.0.0.beta4)
  • arel (0.4.0)
  • bcrypt-ruby (2.1.2)
  • bson (1.0.3)
  • bson_ext (1.0.1)
  • builder (2.1.2)
  • bundler (0.9.26)
  • capistrano (2.5.19)
  • capybara (0.3.8 a94f99)
  • cucumber (0.8.3)
  • cucumber-rails (0.3.2 master-b75110)
  • culerity (0.2.10)
  • database_cleaner (0.5.2 7ea99d)
  • devise (1.1.rc1 88ab2f)
  • diff-lcs (1.1.2)
  • erubis (2.6.5)
  • factory_girl (1.3.0)
  • factory_girl_rails (1.0)
  • faker (0.3.1)
  • ffi (0.6.3)
  • gherkin (2.0.2)
  • highline (1.5.2)
  • i18n (0.4.1)
  • jnunemaker-validatable (1.8.4)
  • joint (0.3.2 11a094)
  • json_pure (1.4.3)
  • mail (2.2.5)
  • mime-types (1.16)
  • mongo (1.0.3)
  • mongo_mapper (0.8.2)
  • net-scp (1.0.2)
  • net-sftp (2.0.4)
  • net-ssh (2.0.23)
  • net-ssh-gateway (1.0.1)
  • nokogiri (1.4.2.1)
  • plucky (0.3.2)
  • polyglot (0.3.1)
  • rack (1.1.0)
  • rack-mount (0.6.6)
  • rack-test (0.5.4)
  • rails (3.0.0.beta4 6682cc)
  • railties (3.0.0.beta4)
  • rake (0.8.7)
  • rspec (2.0.0.beta.13)
  • rspec-core (2.0.0.beta.13)
  • rspec-expectations (2.0.0.beta.13)
  • rspec-mocks (2.0.0.beta.13)
  • rspec-rails (2.0.0.beta.13)
  • selenium-webdriver (0.0.24)
  • term-ansicolor (1.0.5)
  • thor (0.13.6)
  • treetop (1.4.8)
  • trollop (1.16.2)
  • tzinfo (0.3.22)
  • wand (0.2.1)
  • warden (0.10.7)
  • webrat (0.7.1)

I also added a puts statement in the test to show what methods are
available
in the test fixture, and “get” is not in the list. Here is what is in
the
list:

“__memoized”, “should_for_example_group”,
should_not_for_example_group”, “_fixture_class_names”,
“_fixture_path”,
“_fixture_table_names”, “_pre_loaded_fixtures”, “_setup_mocks”,
“_teardown_mocks”, “_use_instantiated_fixtures”,
“_use_transactional_fixtures”, “_verify_mocks”, “a_kind_of”,
“allow_message_expectations_on_nil”, “an_instance_of”, “any_args”,
“anything”, “assert”, “assert_block”, “assert_equal”, “assert_in_delta”,
“assert_instance_of”, “assert_kind_of”, “assert_match”, “assert_nil”,
“assert_no_match”, “assert_not_equal”, “assert_not_nil”,
“assert_not_same”, “assert_nothing_raised”, “assert_nothing_thrown”,
“assert_operator”, “assert_raise”, “assert_raises”, “assert_respond_to”,
“assert_same”, “assert_send”, “assert_throws”, “be”, “be_a”,
“be_a_kind_of”,
“be_a_new”, “be_an”, “be_an_instance_of”, “be_close”, “be_false”,
“be_instance_of”, “be_kind_of”, “be_nil”, “be_true”, “boolean”,
“build_message”, “change”, “described_class”, “double”, “duck_type”,
“eq”,
“eql”, “equal”, “example”, “example=”, “exist”, “expect”,
“fixture_class_names”, “fixture_class_names?”, “fixture_path”,
“fixture_path?”, “fixture_table_names”,
“fixture_table_names?”, “flunk”, “hash_including”, “hash_not_including”,
“have”, “have_at_least”, “have_at_most”, “have_exactly”, “include”,
“instance_of”, “kind_of”, “match”, “method_missing”, “method_name”,
“mock”,
“mock_discrepancy”, “mock_model”, “no_args”, “pending”,
“pre_loaded_fixtures”, “pre_loaded_fixtures?”, “raise_error”,
“respond_to”,
“run_in_transaction?”, “running_example”, “satisfy”, “setup_fixtures”,
“stub_model”, “subject”, “teardown_fixtures”, “throw_symbol”,
“use_instantiated_fixtures”, “use_instantiated_fixtures?”,
“use_transactional_fixtures”, “use_transactional_fixtures?”

Thanks in advance for any help you can provide - sorry for the long
email
(didn’t want to exclude anything…)

Pat

On Jun 25, 2010, at 5:02 PM, Patrick G. wrote:

(Yes, I’m aware of the security implications of modifying data with an HTTP/GET - that’s a separate issue…)
When I run it with rake, I get the following error:

  1. DiscrepanciesController resolves a discrepancy
    Failure/Error: Unable to find C to read failed line
    undefined method `get’ for #<RSpec::Core::ExampleGroup::Nested_1:0xc9170d0 @__memoized={}>

    ./spec/controllers/discrepancies_controller_spec.rb:38 (ignore the line number, commented out code was removed from the sample)

    C:/Users/Patrick_Gannon/.bundle/ruby/1.8/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/activesupport/lib/active_support/dependencies.rb:212:in `inject’

    C:/Ruby187/bin/rake:19:in `load’

    C:/Ruby187/bin/rake:19

I’m surprised this is the first time this has come up with rspec-2, but
here we are :slight_smile:

This is a path-separator bug that I’ll resolve in the next release. For
now, you can do this in your controller specs:

describe DiscrepanciesController do
include RSpec::Rails::ControllerExampleGroup

That should work fine.

If you want to do a more global workaround, add this to your spec_helper
config:

RSpec.configure do |c|
c.include RSpec::Rails::ControllerExampleGroup, :example_group => {
:file_path => /\bspec[\/]controllers[\/]/ }
end

HTH,
David

On Jun 25, 9:21 pm, David C. [email protected] wrote:

require ‘spec_helper’

undefined method `get' for #<RSpec::Core::ExampleGroup::Nested_1:0xc9170d0 @__memoized={}>

include RSpec::Rails::ControllerExampleGroup
David
FYI: Rails-specific example group extensions not loading up in Windows · Issue #99 · rspec/rspec-rails · GitHub

[email protected] wrote in post #921577:

On Jun 25, 9:21 pm, David C. [email protected] wrote:

require ‘spec_helper’

undefined method `get' for

#<RSpec::Core::ExampleGroup::Nested_1:0xc9170d0

@__memoized={}>

include RSpec::Rails::ControllerExampleGroup
David
FYI: Rails-specific example group extensions not loading up in Windows · Issue #99 · rspec/rspec-rails · GitHub

Just add config.include RSpec::Rails::ControllerExampleGroup in
spec_helper.rb