First Test Failures: Anything Obvious?

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]:
    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:

cat app/models/recording.rb

class Recording < ActiveRecord::Base
validate :title, :speaker, :date_of_event, :file, :presence => true
validate :title, :file, :uniqueness => true
end

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.

Try to save the object first and then check for validity.

2010/8/17 Terry M. [email protected]

On 17 August 2010 05:18, Terry M. [email protected] wrote:

assert recording.errors[:title].any?
[/test/unit/recording_test.rb:6]:
is not true.

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.

Colin

Colin L. wrote:

On 17 August 2010 06:31, Gintautas Å imkus [email protected] wrote:

Try to save the object first and then check for validity.

I don’t think that is right, for a start it will not save if it is
invalid.

Colin

The point of the unit test is make sure the object /is/ invalid. That
is, the object is not supposed to have any data yet, meaning that it
will not pass the validation code which requires certain data fields to
be filled.

On 17 August 2010 06:31, Gintautas Å imkus [email protected] wrote:

Try to save the object first and then check for validity.

I don’t think that is right, for a start it will not save if it is
invalid.

Colin

Terry M. wrote:

cat app/models/recording.rb

class Recording < ActiveRecord::Base
validate :title, :speaker, :date_of_event, :file, :presence => true
validate :title, :file, :uniqueness => true
end

Wait, double checked the book… the method is supposed to be
“validates”, not “validate”.

Problem solved? Unfortunately, not quite. New unit test run gives me:

/usr/bin/ruby -I"lib:test"
“/usr/lib64/ruby/gems/1.8/gems/rake-0.8.7/lib/rake/rake_test_loader.rb”
“test/unit/helpers/home_helper_test.rb”
“test/unit/helpers/recordings_helper_test.rb”
“test/unit/recording_test.rb”
/usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:1959:in
method_missing': undefined methodvalidates’ for
#Class:0x7fefd5c73478 (NoMethodError)

Terry M. wrote:

Terry M. wrote:

cat app/models/recording.rb

class Recording < ActiveRecord::Base
validate :title, :speaker, :date_of_event, :file, :presence => true
validate :title, :file, :uniqueness => true
end

Wait, double checked the book… the method is supposed to be
“validates”, not “validate”.

Problem solved? Unfortunately, not quite. New unit test run gives me:

/usr/bin/ruby -I"lib:test"
“/usr/lib64/ruby/gems/1.8/gems/rake-0.8.7/lib/rake/rake_test_loader.rb”
“test/unit/helpers/home_helper_test.rb”
“test/unit/helpers/recordings_helper_test.rb”
“test/unit/recording_test.rb”
/usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:1959:in
method_missing': undefined methodvalidates’ for
#Class:0x7fefd5c73478 (NoMethodError)

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

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs