Still following my rails book (more like, adapting to my project as I
go). My first attempt at a unit test failed. Adapting the example in the
book, I came up with this:
require 'test_helper'
class RecordingTest < ActiveSupport::TestCase
test "record attributes must not be empty" do
recording = Recording.new
assert recording.invalid?
assert recording.errors[:title].any?
assert recording.errors[:speaker].any?
assert recording.errors[:date_of_event].any?
assert recording.errors[:file].any?
end
end
Which gives me:
1) Failure:
test_record_attributes_must_not_be_empty(RecordingTest)
[/test/unit/recording_test.rb:6]:
<false> is not true.
1 tests, 1 assertions, 1 failures, 0 errors
rake aborted!
Command failed with status (1): [/usr/bin/ruby -I"lib:test"
"/usr/lib64/rub...]
The idea was to test my validation code from the model:
From the little I understand, I'm not sure why the record object is not
showing up as invalid as it should, having no data added yet. The only
thing I can note is that I'm using rails 2.3.5, whereas I think the book
is meant for 3.
Have a go in the ruby console. In there you can do
recording = Recording.new
and then inspect the result, call valid on it and so on to see what is
not going as expected.
Found a different API on the Web. Not like what is in the book, but it
works. Changed the model code to the following, and then all the tests
pass fine:
class Recording < ActiveRecord::Base
validates_presence_of :title
validates_presence_of :speaker
validates_presence_of :date_of_event
validates_presence_of :file
validates_presence_of :presence
validates_uniqueness_of :title
validates_uniqueness_of :file
end