When I use test fixtures to populate test data into mysql database I am
running into an unexpected behavior. Only columns explicitly defined in
the fixture is populated into the database. However, created_on,
created_by, updated_on, updated_by fields along with all fields
normally populated by observers are NULL. For example, I have a couple
fields that have their values calculated via observers. I want to test
that these calculations are performed correctly by the observer, so I
don't want to hard code their values in the fixture.
Has anyone else run into this issue? If so, how did you perform testing
of these fields? I realize that I could perform these tests without
fixtures by creating and saving the object. Behind the scenes, Active
Record populates all the fields in the expected manner. Then I could
find the saved record and assert_equal the expected calculations.
However this approach seems brittle and I rather use fixtures. It
doesn't seem (from the results) that I am getting that the fixtures
functionality uses Active Record to serialize data to mysql.
Only columns explicitly defined in the fixture is populated into the database.
I think this is the expected behavior. This way you can set fields to
the exact values you want for testing purposes. If those fields were
automatically populated (based off the system time when the tests were
run?) then your tests would be slightly different each time they ran
and thus potentially brittle.
I realize that I could perform these tests without fixtures by creating and saving the object.
I think this is a reasonable approach in this case but I am interested
to hear if anyone else has suggestions.