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