Jim Morris
2008-Jul-03 00:12 UTC
[rspec-users] unable to access flash from rails helper spec since upgrade to 1.1.4
Hi, Many moons ago I wrote this blog entry... http://blog.wolfman.com/articles/2007/07/14/using-rspec-to-test-haml-helpers I just upgraded that rails project to use rspec 1.1.4 and associated rspec_rails. It seems that my helper when called from the helper specs no longer are able to access flash, controller etc as they did before. I already prepended all helper calls with helper. so I fixed those changes, but I have been unable to figure out how to access flash etc... Here is a simplified example... in ApplicationHelper.rb def test_flash for name in [:notice, :warning, :error] if flash[name] return "#{flash[name]}" end end nil end In my rails/spec/helpers/application_helper_spec.rb require File.dirname(__FILE__) + ''/../spec_helper'' describe ApplicationHelper do it "should test flash" do for name in [:notice, :warning, :error] flash[name]= "flash #{name.to_s} message" helper.test_flash.should match(/.*#{name}.*/) flash[name]= nil end end end I get this error trace... 1) NoMethodError in ''ApplicationHelper should test flash'' You have a nil object when you didn''t expect it! You might have expected an instance of Array. The error occurred while evaluating nil.[] /.../app/helpers/application_helper.rb:23:in `test_flash'' ... flash is nil, this used to work, so what is the new magic incantation to get this to work again? Thanks -- Jim Morris, http://blog.wolfman.com
David Chelimsky
2008-Jul-03 03:54 UTC
[rspec-users] unable to access flash from rails helper spec since upgrade to 1.1.4
On Jul 2, 2008, at 7:12 PM, Jim Morris wrote:> Hi, > > Many moons ago I wrote this blog entry... > > http://blog.wolfman.com/articles/2007/07/14/using-rspec-to-test-haml-helpers > > I just upgraded that rails project to use rspec 1.1.4 and associated > rspec_rails. > > It seems that my helper when called from the helper specs no longer > are able to access flash, controller etc as they did before. > > I already prepended all helper calls with helper. so I fixed those > changes, but I have been unable to figure out how to access flash > etc... > > Here is a simplified example... > > in ApplicationHelper.rb > > def test_flash > for name in [:notice, :warning, :error] > if flash[name] > return "#{flash[name]}" > end > end > nil > end > > In my rails/spec/helpers/application_helper_spec.rb > > require File.dirname(__FILE__) + ''/../spec_helper'' > > describe ApplicationHelper do > > it "should test flash" do > for name in [:notice, :warning, :error] > flash[name]= "flash #{name.to_s} message" > helper.test_flash.should match(/.*#{name}.*/) > flash[name]= nil > end > end > > end > > I get this error trace... > 1) > NoMethodError in ''ApplicationHelper should test flash'' > You have a nil object when you didn''t expect it! > You might have expected an instance of Array. > The error occurred while evaluating nil.[] > /.../app/helpers/application_helper.rb:23:in `test_flash'' > ... > > flash is nil, this used to work, so what is the new magic > incantation to get this to work again?Hey Jim - I fixed this in http://github.com/dchelimsky/rspec-rails/commit/40a0916325dbe9a1631849146d078e330fca71f2 , so you can either grab the very latest from github or wait for the 1.1.5 release (coming in the next few days). Cheers, David
Jim Morris
2008-Jul-03 06:29 UTC
[rspec-users] unable to access flash from rails helper spec since upgrade to 1.1.4
Hi David, Thanks that worked, and fixed that problem. Now I have run into another problem, from the same blog example (which I''ll update once I get it all to work). Within the application helper I call haml_tag, which works fine when the app runs. (used to be called open). However when I try to test that helper in my helper spec I get... NoMethodError in ''ApplicationHelper should display flash'' undefined method `haml_tag'' for #<Spec::Rails::Example::HelperExampleGroup::HelperObject:0xb71ced20> For some reason it doesn''t know anything about haml when run from the spec. I guess I need to inject a require haml or something into the HelperObject? I just don''t know how to do that. I am using the latest version of HAML but I am still using rails 1.2.6 Any ideas? Thanks Jim David Chelimsky wrote:> On Jul 2, 2008, at 7:12 PM, Jim Morris wrote: > >> Hi, >> >> Many moons ago I wrote this blog entry... >> >> http://blog.wolfman.com/articles/2007/07/14/using-rspec-to-test-haml-helpers >> >> >> I just upgraded that rails project to use rspec 1.1.4 and associated >> rspec_rails. >> >> It seems that my helper when called from the helper specs no longer >> are able to access flash, controller etc as they did before. >> >> I already prepended all helper calls with helper. so I fixed those >> changes, but I have been unable to figure out how to access flash etc... >> >> Here is a simplified example... >> >> in ApplicationHelper.rb >> >> def test_flash >> for name in [:notice, :warning, :error] >> if flash[name] >> return "#{flash[name]}" >> end >> end >> nil >> end >> >> In my rails/spec/helpers/application_helper_spec.rb >> >> require File.dirname(__FILE__) + ''/../spec_helper'' >> >> describe ApplicationHelper do >> >> it "should test flash" do >> for name in [:notice, :warning, :error] >> flash[name]= "flash #{name.to_s} message" >> helper.test_flash.should match(/.*#{name}.*/) >> flash[name]= nil >> end >> end >> >> end >> >> I get this error trace... >> 1) >> NoMethodError in ''ApplicationHelper should test flash'' >> You have a nil object when you didn''t expect it! >> You might have expected an instance of Array. >> The error occurred while evaluating nil.[] >> /.../app/helpers/application_helper.rb:23:in `test_flash'' >> ... >> >> flash is nil, this used to work, so what is the new magic incantation >> to get this to work again? > > Hey Jim - I fixed this in > http://github.com/dchelimsky/rspec-rails/commit/40a0916325dbe9a1631849146d078e330fca71f2, > so you can either grab the very latest from github or wait for the 1.1.5 > release (coming in the next few days). > > Cheers, > David > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >-- Jim Morris, http://blog.wolfman.com
David Chelimsky
2008-Jul-03 07:39 UTC
[rspec-users] unable to access flash from rails helper spec since upgrade to 1.1.4
On Jul 3, 2008, at 1:29 AM, Jim Morris wrote:> Hi David, > > Thanks that worked, and fixed that problem. > > Now I have run into another problem, from the same blog example > (which I''ll update once I get it all to work). > > Within the application helper I call haml_tag, which works fine when > the app runs. (used to be called open). > > However when I try to test that helper in my helper spec I get... > > NoMethodError in ''ApplicationHelper should display flash'' > undefined method `haml_tag'' for > #<Spec::Rails::Example::HelperExampleGroup::HelperObject:0xb71ced20> > > For some reason it doesn''t know anything about haml when run from > the spec. > > I guess I need to inject a require haml or something into the > HelperObject? I just don''t know how to do that.Try this: before(:each) do helper.extend Haml::Helpers end it "should ...." do ... end> > > I am using the latest version of HAML but I am still using rails 1.2.6 > > Any ideas? > > Thanks > Jim > > David Chelimsky wrote: >> On Jul 2, 2008, at 7:12 PM, Jim Morris wrote: >>> Hi, >>> >>> Many moons ago I wrote this blog entry... >>> >>> http://blog.wolfman.com/articles/2007/07/14/using-rspec-to-test-haml-helpers >>> >>> I just upgraded that rails project to use rspec 1.1.4 and >>> associated rspec_rails. >>> >>> It seems that my helper when called from the helper specs no >>> longer are able to access flash, controller etc as they did before. >>> >>> I already prepended all helper calls with helper. so I fixed those >>> changes, but I have been unable to figure out how to access flash >>> etc... >>> >>> Here is a simplified example... >>> >>> in ApplicationHelper.rb >>> >>> def test_flash >>> for name in [:notice, :warning, :error] >>> if flash[name] >>> return "#{flash[name]}" >>> end >>> end >>> nil >>> end >>> >>> In my rails/spec/helpers/application_helper_spec.rb >>> >>> require File.dirname(__FILE__) + ''/../spec_helper'' >>> >>> describe ApplicationHelper do >>> >>> it "should test flash" do >>> for name in [:notice, :warning, :error] >>> flash[name]= "flash #{name.to_s} message" >>> helper.test_flash.should match(/.*#{name}.*/) >>> flash[name]= nil >>> end >>> end >>> >>> end >>> >>> I get this error trace... >>> 1) >>> NoMethodError in ''ApplicationHelper should test flash'' >>> You have a nil object when you didn''t expect it! >>> You might have expected an instance of Array. >>> The error occurred while evaluating nil.[] >>> /.../app/helpers/application_helper.rb:23:in `test_flash'' >>> ... >>> >>> flash is nil, this used to work, so what is the new magic >>> incantation to get this to work again? >> Hey Jim - I fixed this in http://github.com/dchelimsky/rspec-rails/commit/40a0916325dbe9a1631849146d078e330fca71f2 >> , so you can either grab the very latest from github or wait for >> the 1.1.5 release (coming in the next few days). >> Cheers, >> David >> _______________________________________________ >> rspec-users mailing list >> rspec-users at rubyforge.org >> http://rubyforge.org/mailman/listinfo/rspec-users > > > -- > Jim Morris, http://blog.wolfman.com > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users
Jim Morris
2008-Jul-03 16:01 UTC
[rspec-users] unable to access flash from rails helper spec since upgrade to 1.1.4
Ok, its messy but this works... before :each do init_haml_helpers helper.extend Haml helper.extend Haml::Helpers helper.send :init_haml_helpers end it "should display flash" do for name in [:notice, :warning, :error] flash[name]= "flash #{name.to_s} message" helper.capture_haml{ helper.display_flash }.should match(/<div class=''#{name.to_s}''>\s*#{flash[name]}\s*<\/div>/) flash[name]= nil end end ... NOTE that the capture haml needs to be prepended by helper. otherwise nothing gets returned. David Chelimsky wrote:> On Jul 3, 2008, at 1:29 AM, Jim Morris wrote: > >> Hi David, >> >> Thanks that worked, and fixed that problem. >> >> Now I have run into another problem, from the same blog example (which >> I''ll update once I get it all to work). >> >> Within the application helper I call haml_tag, which works fine when >> the app runs. (used to be called open). >> >> However when I try to test that helper in my helper spec I get... >> >> NoMethodError in ''ApplicationHelper should display flash'' >> undefined method `haml_tag'' for >> #<Spec::Rails::Example::HelperExampleGroup::HelperObject:0xb71ced20> >> >> For some reason it doesn''t know anything about haml when run from the >> spec. >> >> I guess I need to inject a require haml or something into the >> HelperObject? I just don''t know how to do that. > > Try this: > > before(:each) do > helper.extend Haml::Helpers > end > > it "should ...." do > ... > end > > >> >> >> I am using the latest version of HAML but I am still using rails 1.2.6 >> >> Any ideas? >> >> Thanks >> Jim >> >> David Chelimsky wrote: >>> On Jul 2, 2008, at 7:12 PM, Jim Morris wrote: >>>> Hi, >>>> >>>> Many moons ago I wrote this blog entry... >>>> >>>> http://blog.wolfman.com/articles/2007/07/14/using-rspec-to-test-haml-helpers >>>> >>>> >>>> I just upgraded that rails project to use rspec 1.1.4 and associated >>>> rspec_rails. >>>> >>>> It seems that my helper when called from the helper specs no longer >>>> are able to access flash, controller etc as they did before. >>>> >>>> I already prepended all helper calls with helper. so I fixed those >>>> changes, but I have been unable to figure out how to access flash >>>> etc... >>>> >>>> Here is a simplified example... >>>> >>>> in ApplicationHelper.rb >>>> >>>> def test_flash >>>> for name in [:notice, :warning, :error] >>>> if flash[name] >>>> return "#{flash[name]}" >>>> end >>>> end >>>> nil >>>> end >>>> >>>> In my rails/spec/helpers/application_helper_spec.rb >>>> >>>> require File.dirname(__FILE__) + ''/../spec_helper'' >>>> >>>> describe ApplicationHelper do >>>> >>>> it "should test flash" do >>>> for name in [:notice, :warning, :error] >>>> flash[name]= "flash #{name.to_s} message" >>>> helper.test_flash.should match(/.*#{name}.*/) >>>> flash[name]= nil >>>> end >>>> end >>>> >>>> end >>>> >>>> I get this error trace... >>>> 1) >>>> NoMethodError in ''ApplicationHelper should test flash'' >>>> You have a nil object when you didn''t expect it! >>>> You might have expected an instance of Array. >>>> The error occurred while evaluating nil.[] >>>> /.../app/helpers/application_helper.rb:23:in `test_flash'' >>>> ... >>>> >>>> flash is nil, this used to work, so what is the new magic >>>> incantation to get this to work again? >>> Hey Jim - I fixed this in >>> http://github.com/dchelimsky/rspec-rails/commit/40a0916325dbe9a1631849146d078e330fca71f2, >>> so you can either grab the very latest from github or wait for the >>> 1.1.5 release (coming in the next few days). >>> Cheers, >>> David >>> _______________________________________________ >>> rspec-users mailing list >>> rspec-users at rubyforge.org >>> http://rubyforge.org/mailman/listinfo/rspec-users >> >> >> -- >> Jim Morris, http://blog.wolfman.com >> _______________________________________________ >> rspec-users mailing list >> rspec-users at rubyforge.org >> http://rubyforge.org/mailman/listinfo/rspec-users > >-- Jim Morris, http://blog.wolfman.com