Testing a model method - private method?


#1

Hi everyone,

I’m trying to test a method in my model:

def html_email
return “” + self.email + “
end

The method works ok. But when I try to test it:

assert_equal ("<a href='mailto:" + people(:staff1_person).email +

“’>” + people(:staff1_person).email + “”), @person.html_email

I get a failure:

  1. Error:
    test_html_email(PersonTest):
    NoMethodError: private method html_email' called for #<Person:0x256b460> /Applications/Locomotive/Bundles/rails-1.0.0-max.bundle/Contents/Resources/ports/lib/ruby/gems/1.8/gems/activerecord-1.13.2/lib/active_record/base.rb:1501:inmethod_missing’
    test/unit/person_test.rb:32:in `test_html_email’

The method works without errors (that I can see) when using it in a
view. Why not in a test?

Thanks,

Sean


#2

Somewhere above the html_email method you have the keyword
‘private’. You need to move the html_email method above the private
keyword or it will only be accessible by member functions of your model.

-Derrick S.


#3

That wasn’t it, but it clued me into what it was. The method was
defined AFTER the Person class definition ended.

What’s the statute of limitations on calling oneself a newbie? I’m
going to have to finish off these posts with “Sorry, I’m a doofus”
instead.

Thanks, Derrick! :slight_smile:

Sean