# Testing custom model functions in unit tests

**URL:** <https://www.ruby-forum.com/t/testing-custom-model-functions-in-unit-tests/140611>\
**Category:** Rails\
**Created:** [June 16, 2008, 8:20pm UTC](https://www.ruby-forum.com/t/testing-custom-model-functions-in-unit-tests/140611 "2008-06-16T20:20:54Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![tcsnide](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/eb8c5e/32.png) [@tcsnide](https://www.ruby-forum.com/u/tcsnide)\
**Post date:** [June 16, 2008, 8:20pm UTC](https://www.ruby-forum.com/t/testing-custom-model-functions-in-unit-tests/140611/1 "2008-06-16T20:20:54Z")

</div>

I have a custom function, for kicks:

def find\_newest  
Card.find(:last)  
end

In my unit test I want to:

assert\_kind\_of(Card,Card.find\_newest)

But I get the “method not found” error.

What am I missing?

-Tom

---

<div class="post-metadata">

**Author:** ![tcsnide](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/eb8c5e/32.png) [@tcsnide](https://www.ruby-forum.com/u/tcsnide)\
**Post date:** [June 16, 2008, 8:22pm UTC](https://www.ruby-forum.com/t/testing-custom-model-functions-in-unit-tests/140611/2 "2008-06-16T20:22:41Z")

</div>

Rather, it should be noted that find\_newest is in my model…

---

<div class="post-metadata">

**Author:** ![tcsnide](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/eb8c5e/32.png) [@tcsnide](https://www.ruby-forum.com/u/tcsnide)\
**Post date:** [June 16, 2008, 9:17pm UTC](https://www.ruby-forum.com/t/testing-custom-model-functions-in-unit-tests/140611/3 "2008-06-16T21:17:09Z")

</div>

I answered my own thought… in the unit test, I have an object,  
created via fixtures, @c and I am able to call the proper method, and  
get back the proper value, passing the assertion.

(I figured I would stuff “find newest” into the model)

---

<div class="post-metadata">

**Author:** ![tcsnide](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/eb8c5e/32.png) [@tcsnide](https://www.ruby-forum.com/u/tcsnide)\
**Post date:** [June 16, 2008, 9:52pm UTC](https://www.ruby-forum.com/t/testing-custom-model-functions-in-unit-tests/140611/4 "2008-06-16T21:52:41Z")

</div>

And don’t write the Card constant within the method once you do this,  
since self in a class method is the class.

def self.find\_newest  
find(:last)  
end

On Jun 16, 3:23 pm, Frederick C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![tcsnide](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/eb8c5e/32.png) [@tcsnide](https://www.ruby-forum.com/u/tcsnide)\
**Post date:** [June 17, 2008, 3:08am UTC](https://www.ruby-forum.com/t/testing-custom-model-functions-in-unit-tests/140611/5 "2008-06-17T03:08:16Z")

</div>

> In my unit test I want to:
> 
> assert\_kind\_of(Card,Card.find\_newest)
> 
> But I get the “method not found” error.

After you apply the ‘def self.find\_newest’, look up my assert\_latest, to  
learn  
its Card.maximum(:id) trick:

> **[O'Reilly Media - Technology and Business Training](https://www.oreilly.com)**
>
> Gain technology and business knowledge and hone your skills with learning resources created and curated by O'Reilly's experts: live online training, video, books, our platform has content from 200+ of the world's best publishers.

Note that the online version of assert\_latest is fully productized…

---

<div class="post-metadata">

**Author:** ![tcsnide](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/eb8c5e/32.png) [@tcsnide](https://www.ruby-forum.com/u/tcsnide)\
**Post date:** [June 16, 2008, 9:24pm UTC](https://www.ruby-forum.com/t/testing-custom-model-functions-in-unit-tests/140611/6 "2008-06-16T21:24:50Z")

</div>

On Jun 16, 8:16 pm, “sullivan.t” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> I answered my own thought… in the unit test, I have an object,  
> created via fixtures, @c and I am able to call the proper method, and  
> get back the proper value, passing the assertion.

What you shoud probably do is create find\_newest as a class method, ie

def self.find\_newest  
…  
end

rather than requiring an instance of the class for something that is  
not specific to any particular instance

Fred

---

<div class="post-metadata">

**Author:** ![tcsnide](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/eb8c5e/32.png) [@tcsnide](https://www.ruby-forum.com/u/tcsnide)\
**Post date:** [June 17, 2008, 1:22pm UTC](https://www.ruby-forum.com/t/testing-custom-model-functions-in-unit-tests/140611/7 "2008-06-17T13:22:28Z")

</div>

Interesting.

Thanks for the thoughts, guys!
