views:

199

answers:

1

I am trying to test a model's attributes for formatting with this:

# myapp/test/unit/comment_test.rb
require 'test_helper'

class CommentTest < ActiveSupport::TestCase
  should_belong_to :article

  should_validate_presence_of :name
  should_validate_presence_of :email
  should_validate_presence_of :content
  should_validate_presence_of :article_id

  should_not_allow_values_for :name, "123", "bob_y", "dave!"
  should_allow_values_for :name, "Bob", "Joe Smith"

  should_not_allow_values_for :email, "abc", "[email protected]", "a@!d.com", "[email protected]"
  should_allow_values_for :email, "[email protected]", "[email protected]", "[email protected]"
end


# myapp/app/models/comment.rb
class Comment < ActiveRecord::Base
  belongs_to :article

  validates_presence_of :name
  validates_presence_of :email
  validates_presence_of :content
  validates_presence_of :article_id

  validates_format_of :name, :with => /\b[\w]+\b/i
end

I am doing a similar sort of validation in other models and it works fine, but in this one I am getting these errors:

  2) Failure:
test: Comment should not allow email to be set to "[email protected]". (CommentTest)
[/Library/Ruby/Gems/1.8/gems/thoughtbot-shoulda-2.10.2/lib/shoulda/assertions.rb:67:in `assert_rejects'
 /Library/Ruby/Gems/1.8/gems/thoughtbot-shoulda-2.10.2/lib/shoulda/active_record/macros.rb:139:in `__bind_1276100388_113010'
 /Library/Ruby/Gems/1.8/gems/thoughtbot-shoulda-2.10.2/lib/shoulda/context.rb:351:in `call'
 /Library/Ruby/Gems/1.8/gems/thoughtbot-shoulda-2.10.2/lib/shoulda/context.rb:351:in `test: Comment should not allow email to be set to "[email protected]". ']:
Expected errors when email is set to "[email protected]", got errors: name can't be blank (nil)name is invalid (nil)content can't be blank (nil)article_id can't be blank (nil)

I get this on every test shoulda makes, I am using Factory Girl also if that matters.

A: 

Your comment model doesn't validate the email format. There isn't anything wrong with what you are doing, your test just isn't passing because your code isn't correct for the test to pass.

Add a validation for the email format to your Comment class.

validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i

and then your test should pass.

danivovich
Wow I have no idea why I did not see that, must have been working too late. Thanks
trobrock