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@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users


--
Jim Morris, http://blog.wolfman.com
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users




--
Jim Morris, http://blog.wolfman.com
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to