Matthew Williams wrote:
Can anyone point me towards a good resource on appropriately testing all
the fields in a given model? Or perhaps give some advice.For example, this test below is for a model with only a single column,
but when I add a new column (a date field for example), how would I
extend the test to cover both the body and date column of the model?def test_that_status_note_body_is_valid
note = Note.new
# Empty body field
assert !note.valid?
assert note.errors.invalid?(:body)
note.body = nil
# Nil body field
assert !note.valid?
assert note.errors.invalid?(:body)
note.body = "Testing body that should pass"
# Correct body field
assert note.valid?
assert !note.errors.invalid?(:body)
endWould I create a new test called "test_that_date_is_valid" and only test
against that or would I create tests that build instances of "Note" that
contain as many test cases as it would take to test against every case?
(which seems correct but when I think about how many tests would be
involved for a model with even 5 columns it then seems to look not so
correct)I appreciate the responses, thanks!
Maybe you're can use a generic new method - something like:
def test_status_for_something
note = new_note(:body => nil)
...
end
def new_note(options)
Note.new({:body => "Default body", :header => "Default header", :date => Date.today}.merge(options))
end
Btw, I suggest that you split your testcases into smaller pieces, the above could be split into test_body_should_be_invalid_when_nil, test_body_should_be_invalid_when_empty_string, test_body_should_be_valid_when_nonempty_string.
Makes it easier to spot the problem when a test breaks.