Appropriately unit testing my models?

Try something like

class TestModel < Test::Unit::TestCase
  def setup
     @model_instance = Model.new
  end

  ## add here whatever you can think as empty value
  def test_should_not_body_be_empty
    assert_error_on @model_instance, :body, :body => nil
    assert_error_on @model_instance, :body, :body => ""
  end

  # TODO: clean up this to use the first key of values hash as field
  def assert_error_on(model, field, values = {})
    # there is no assert here cuz others field may have errors
    # and the idea is test one thing at time.
    model.valid?
    assert not model.errors[field].nil?
  end

  # TODO: clean up this to use the first key of values hash as field
  def assert_no_errors_on(model, field, values = {})
    # there is no assert here cuz others field may have errors
    # and the idea is test one thing at time.
    model.valid?
    assert model.errors[field].nil?
  end
end

Try to keep your tests clean, do one thing at time, and reflect that
thing
in the test name. And add as many test you need. Always remember
that Test Cases are classes so add helper method to avoid repetitive
tasks
is not only good, its a must.

With this idea in mind test something like this:

class Model < ActiveRecord::Base
  validates_presence_of :name
  validates_length_of :name, :in => 4..128
  validates_uniqueness_of :name
end

will take at least one test per validation, but you probably wrote the
tests first right? :stuck_out_tongue: