8. Testing Your Models
8.1 A Unit Test
Unit tests are what we use to test our models. Generally, there is one test for each model. The test stubs are created automatically when you use script/generate model SecretAgent (for example).
Let’s take a look at what a unit test might look like.
# hook into the Rails environment
require File.dirname(__FILE__) + '/../test_helper'
# grab the user model
require 'secret_agent'
class SecretAgent < Test::Unit::TestCase
fixtures :secret_agents
# ensure the SecretAgent plays well with the database
def test_create_read_update_delete
# create a brand new secret agent
jimmy = SecretAgent.new("jagent", "unbelievablysecretpassword")
# save him
assert jimmy.save
# read him back
agent = SecretAgent.find(jimmy.id)
# compare the usernames
assert_equal jimmy.username, agent.username
# change the password by using hi-tech encryption
agent.username = agent.username.reverse
# save the changes
assert agent.save
# the agent gets killed
assert agent.destroy
end
end
In this basic unit test, we’re exercising the SecretAgent model. In our solitary test, we’re proving a bunch of things about our SecretAgent model. We try 4 different assertions to test that we can do the basics with the database such as create, read, update and delete (creatively known as CRUD).
It is up to you to decide just how much you want to test of your model. Ideally you test anything that could possibly break, however, it is really trial and error. Only you know what’s best to test.
You most certainly want to test the validation code, and additionally, you probably want a least 1 test for every method in your model.