vendredi 15 avril 2016

Why is this Rails 4 model test failing?

I have the following model test in Rails 4:

require 'test_helper'

class AwardTest < ActiveSupport::TestCase
  def test_validity_of_year

    # test for rejection of missing year
    award = Award.new({name: "Test award, student_id: 1"})
    assert !award.valid?

    # test under lower boundary
    award.year = 1979
    assert !award.valid?

    # lower boundary
    award.year = 1980
    assert award.valid?

    # top boundary
    award.year = Date.today.year
    assert award.valid?

    # top boundary case, award isn't valid for next year
    award.year = Date.today.year + 1
    assert !award.valid?
  end
end

Here is the award model:

class Award < ApplicationRecord
    belongs_to :student

    validates_presence_of :name, :year
  validates_inclusion_of :year, in: (1980..Date.today.year)
end

Here is the output of my award_test.rb

bundle exec rake test TEST=test/models/award_test.rb
DEPRECATION WARNING: alias_method_chain is deprecated. Please, use Module#prepend instead. From module, you can access the original method using super. (called from included at .rvm/gems/ruby-2.2.2@rails/gems/turbolinks-2.5.3/lib/turbolinks/xhr_url_for.rb:7)
Run options: --seed 53138

# Running:

F

Failure:
AwardTest#test_validity_of_year [/Users/marklocklear/sandbox/students03/test/models/award_test.rb:16]:
Failed assertion, no message given.


bin/rails test test/models/award_test.rb:4



Finished in 0.042099s, 23.7538 runs/s, 71.2614 assertions/s.

1 runs, 3 assertions, 1 failures, 0 errors, 0 skips

If I run this manually in the console I get...

2.2.2 :037 > award = Award.new({name: "Test award", student_id: 1})
 => #<Award id: nil, name: "Test award", year: nil, student_id: 1, created_at: nil, updated_at: nil>
2.2.2 :038 > award.valid?
  Student Load (0.1ms)  SELECT  "students".* FROM "students" WHERE "students"."id" = ? LIMIT ?  [["id", 1], ["LIMIT", 1]]
 => false
2.2.2 :039 > award.year = 1979
 => 1979
2.2.2 :040 > award.valid?
 => false
2.2.2 :041 > award.year = 1980
 => 1980
2.2.2 :042 > award.valid?
 => true

Aucun commentaire:

Enregistrer un commentaire