On Thu, Mar 11, 2010 at 11:12 AM, David Chelimsky <dchelim...@gmail.com> wrote: > 2010/3/11 Nicolás Sanguinetti <godf...@gmail.com>: >> Scratch that, it works if you run just that file, if you run the whole >> suite it doesn't. WTH. > > The fact that it works at all is an accident :)
Hah, ok :) Why shouldn't two different types of specs work off the same file? (if you care for a technical explanation :)) Since it works by moving it to another file, so I'm just doing that (describe MyController, :type => :controller), so it's just more idle curiosity than anything else, at this point :) >> >> 2010/3/11 Nicolás Sanguinetti <godf...@gmail.com>: >>> Interesting: >>> >>> describe SomeModule do >>> describe "Bar", :type => :controller do >>> controller_name "blah" >>> end >>> end >>> >>> Doesn't work, while >>> >>> describe SomeModule do >>> end >>> >>> describe "Bar", :type => :controller do >>> controller_name "blah" >>> end >>> >>> does. >>> >>> 2010/3/11 Nicolás Sanguinetti <godf...@gmail.com>: >>>> On Thu, Mar 11, 2010 at 5:10 AM, Scott Taylor <sc...@railsnewbie.com> >>>> wrote: >>>>> >>>>> On Mar 11, 2010, at 1:26 AM, Nicolás Sanguinetti wrote: >>>>> >>>>>> We have an app that has "extensions" that are built as rails engines. >>>>>> Each engine needs some code in the controllers, which we solved as >>>>>> "include this module, call a method". In order to test it, though, we >>>>>> don't want to "copy" the test for how that works into each engine, so >>>>>> the idea is to write the tests once, in 'spec/lib/extensions_spec.rb', >>>>>> where we are testing the other stuff that's common for all the >>>>>> extensions (which are defined on lib/extensions.rb, thus the spec's >>>>>> location) >>>>>> >>>>>> In order to do it, I'm declaring a 'sample' controller in the specs >>>>>> (just include the module, call the method), and then writing a couple >>>>>> specs for what we are doing. Problem is, I can't get rspec to >>>>>> understand that that example group is a controller example groups. >>>>>> >>>>>> I have >>>>>> >>>>>> class MyExampleController < ApplicationController >>>>>> include Extensions::ControllerHelpers >>>>>> call_awesome_method # this, among other things, defines an >>>>>> instance method on the controller that I want to test >>>>>> end >>>>>> >>>>>> inside my spec, and after that I tried: >>>>>> >>>>>> 1) describe("controller helpers", :type => :controller) { >>>>>> controller_name "my_example"; ... } >>>>>> >>>>>> It complains about controller_name not being a method of this dynamic >>>>>> subclass of ActiveSupport::TestCase. >>>>> >>>>> That seems like a really strange error. What is the actual stack trace? >>>> >>>> ./spec/lib/extensions_spec.rb:20: undefined method `controller_name' >>>> for ActiveSupport::TestCase::Subclass_1:Class (NoMethodError) >>>> from >>>> $gem_path/rspec-1.3.0/lib/spec/example/example_group_methods.rb:183:in >>>> `module_eval' >>>> from >>>> $gem_path/rspec-1.3.0/lib/spec/example/example_group_methods.rb:183:in >>>> `subclass' >>>> from >>>> $gem_path/rspec-1.3.0/lib/spec/example/example_group_methods.rb:55:in >>>> `describe' >>>> from >>>> $gem_path/rspec-1.3.0/lib/spec/example/example_group_factory.rb:31:in >>>> `create_example_group' >>>> from $gem_path/rspec-1.3.0/lib/spec/dsl/main.rb:28:in `describe' >>>> from ./spec/lib/extensions_spec.rb:19 >>>> from >>>> $gem_path/activesupport-2.3.5/lib/active_support/dependencies.rb:147:in >>>> `load_without_new_constant_marking' >>>> from >>>> $gem_path/activesupport-2.3.5/lib/active_support/dependencies.rb:147:in >>>> `load' >>>> from >>>> $gem_path/rspec-1.3.0/lib/spec/runner/example_group_runner.rb:15:in >>>> `load_files' >>>> from >>>> $gem_path/rspec-1.3.0/lib/spec/runner/example_group_runner.rb:14:in `each' >>>> from >>>> $gem_path/rspec-1.3.0/lib/spec/runner/example_group_runner.rb:14:in >>>> `load_files' >>>> from $gem_path/rspec-1.3.0/lib/spec/runner/options.rb:133:in >>>> `run_examples' >>>> from $gem_path/rspec-1.3.0/lib/spec/runner/command_line.rb:9:in >>>> `run' >>>> from script/spec:10 >>>> >>>> (sanitized it a bit) >>>> >>>>> What versions of the test-unit gem do you have installed? What version >>>>> of rails? rspec? If you uninstall the test-unit gem, will it work with >>>>> the :type => :controller hash given to describe? >>>> >>>> This is using rails 2.3.5, rspec 1.3.0, and rspec-rails 1.3.2. I do >>>> not have test-unit on this system, I have mocha 0.9.8 (though it >>>> shouldn't be required in the environment by anyone here) >>>> >>>>> (I've noticed *very* strange things with the test-unit gem installed in >>>>> the past - such as a test suite which was 100% green, using a hybrid of >>>>> mocha + rspec mocks/stubs. When the gem was uninstalled, half the test >>>>> suite failed!) >>>>> >>>>>> After some time reading the source I figured that :type => :controller >>>>>> pretty much just works for config.include/config.extend. So on to the >>>>>> next thing: >>>>> >>>>> Have you taken a look at Spec::Example::ExampleGroupFactory? >>>> >>>> Ah, darn, I hadn't gotten that far into rspec's rabbit hole, and >>>> missed the reference in rspec-rails. That's what you get for trying to >>>> debug stuff at 4am :) So, :type => :controller should be enough, then. >>>> >>>> Still, doing: >>>> >>>> describe MyExampleController, :type => :controller do >>>> it "should do stuff" do >>>> controller.should_receive(:foo) >>>> controller.extension.bar >>>> end >>>> end >>>> >>>> Fails with 'undefined local variable or method `controller' for >>>> #<ActiveSupport::TestCase::Subclass_1::Subclass_4:0x1075ca230>' >>>> >>>> And replacing controller with @controller gives me 'undefined method >>>> `bar' for nil:NilClass'. Which is pretty much the same results I got a >>>> few hours ago before going to sleep :( >>>> >>>> …So :type => :controller is apparently not enough for rspec to pick up on >>>> this. >>>> >>>>> Not sure if this will help, but here's a patch that brynary and I banged >>>>> out way back in rspec 1.1.9 to support spec/unit & spec/integration: (the >>>>> usual disclaimer applies - all the good parts are his, all the bad parts >>>>> are mine) >>>>> >>>>> http://gist.github.com/328919 >>>> >>>> Thanks :) >>>> >>>>> That piece of the code might at least take you to a place where you can >>>>> debug what's going on. >>>>> >>>>> Best, >>>>> >>>>> Scott >>>>> >>>>> _______________________________________________ >>>>> rspec-users mailing list >>>>> rspec-users@rubyforge.org >>>>> http://rubyforge.org/mailman/listinfo/rspec-users >>>>> >>>> >>> >> _______________________________________________ >> rspec-users mailing list >> rspec-users@rubyforge.org >> http://rubyforge.org/mailman/listinfo/rspec-users >> > _______________________________________________ > rspec-users mailing list > rspec-users@rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users > _______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users