2010/3/11 Nicolás Sanguinetti <godf...@gmail.com>: > Interesting: > > describe SomeModule do > describe "Bar", :type => :controller do > controller_name "blah" > end > end
You can only set the type in the outermost-nested group. The reason for this is that the nested groups are subclasses of the outer group. So you could do this: describe SomeModule, :type => :controller do describe "Bar" do controller_name "blah" end end and it should work. HTH, David > > 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