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