How to spec a Rails helper method


#1

I’m trying to write specs for a helper method that I’m creating, but
my specs are failing to find the helper method

app/helpers/properties_helper.rb

module PropertiesHelper
def format_utilities(utilities)
end
end

spec/helpers/properties_helper_spec.rb

require File.expand_path(File.dirname(FILE) + ‘/…/spec_helper’)

describe PropertiesHelper do
describe ‘#format_utilities’ do
it ‘should format a utilities value’ do
format_utilities(nil).should == ‘Unknown’
end
end
end

The error that’s occuring is:

NoMethodError in ‘PropertiesHelper#format_utilities should format a
utilities value’
undefined method format_utilities' for #< Spec ::Rails::Example::HelperExampleGroup::Subclass_1::Subclass_1:0x22a121c> /Users/nick/src/housing-rentals/vendor/plugins/factories-and-workers/ lib/factories-and-workers/factory_builder.rb:36:inmethod_missing’
./spec/helpers/properties_helper_spec.rb:7:
script/spec:4:

As far as I can tell, my specs match what was recommended back in
March 2008 in this thread:
http://www.ruby-forum.com/topic/145723

Any suggestions?
-Nick


#2

On Fri, Nov 21, 2008 at 1:18 PM, Nick H. removed_email_address@domain.invalid
wrote:

require File.expand_path(File.dirname(FILE) + ‘/…/spec_helper’)

describe PropertiesHelper do
describe ‘#format_utilities’ do
it ‘should format a utilities value’ do
format_utilities(nil).should == ‘Unknown’
end
end
end

Try: helper.format_utilities

When describing a module RSpec will include that module into an object
accessible via the helper method. It used to work like you are
expressing your code, but no longer it does. :wink:

Zach

script/spec:4:
http://rubyforge.org/mailman/listinfo/rspec-users


Zach D.
http://www.continuousthinking.com
http://www.mutuallyhuman.com


#3

I’m not sure what version it was, but Rails helper modules are no longer
included implicitly in helper specs. [1]

You should rewrite your spec as:

describe PropertiesHelper do
describe ‘#format_utilities’ do
it ‘should format a utilities value’ do
helper.format_utilities(nil).should == ‘Unknown’
end
end
end

or

describe PropertiesHelper do
include PropertiesHelper
describe ‘#format_utilities’ do
it ‘should format a utilities value’ do
format_utilities(nil).should == ‘Unknown’
end
end
end

[1]
http://blog.davidchelimsky.net/2008/5/29/rspec-waving-bye-bye-to-implicit-module-inclusion


#4

On 21 Nov 2008, at 18:18, Nick H. wrote:

require File.expand_path(File.dirname(FILE) + ‘/…/spec_helper’)

describe PropertiesHelper do
describe ‘#format_utilities’ do
it ‘should format a utilities value’ do
format_utilities(nil).should == ‘Unknown’
Here, try
helper.format_utilities(nil).should == ‘Unknown’
#<
http://www.ruby-forum.com/topic/145723
I don’t know about that thread - I wasn’t using RSpec at the time, but
certainly the way I’ve always done it is use HelperExampleGroup.helper
to call the helper module. This is backed up by the docs:

http://rspec.info/documentation/rails/writing/helpers.html

HTH,
Matt


#5

Have a look at the change to no longer implicitly include modules:

http://blog.davidchelimsky.net/articles/2008/05/29/rspec-waving-bye-bye-to-implicit-module-inclusion

Regards,
Craig


#6

On 2008-11-24, at 00:39, Zach D. wrote:

Try: helper.format_utilities

Thanks everyone! I should have searched the API rather than Google.
I’ll do that next time.

Cheers,
Nick


#7

On Fri, Nov 21, 2008 at 12:18 PM, Nick H. removed_email_address@domain.invalid
wrote:

require File.expand_path(File.dirname(FILE) + ‘/…/spec_helper’)

in this thread:
http://www.ruby-forum.com/topic/145723

March is a long time ago :slight_smile:

Use helper. format_utilities …

Read this http://rspec.info/documentation/rails/writing/helpers.html
and if you’re still unsure feel free to write back.

Cheers,
David


#8

On Nov 21, 2008, at 1:18 PM, Nick H. wrote:

require File.expand_path(File.dirname(FILE) + ‘/…/spec_helper’)

describe PropertiesHelper do
describe ‘#format_utilities’ do
it ‘should format a utilities value’ do
format_utilities(nil).should == ‘Unknown’
end
end
end

The error that’s occuring is:

Helpers are no longer automagically mixed into example groups. Use
the “helper” object (helper.format_uttilities)

Scott