Должен быть формат тестирования

Я пытаюсь проверить атрибуты модели для форматирования следующим образом:

# 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

Я выполняю аналогичную проверку в других моделях, и она работает нормально, но в этой я получаю следующие ошибки:

  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)

Я получаю это на каждом тесте, который должен делать, я также использую Factory Girl, если это имеет значение.


person trobrock    schedule 09.06.2010    source источник


Ответы (1)


Ваша модель комментария не проверяет формат электронной почты. В том, что вы делаете, нет ничего плохого, ваш тест просто не проходит, потому что ваш код не подходит для прохождения теста.

Добавьте проверку формата электронной почты в свой класс комментариев.

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

и тогда ваш тест должен пройти.

person danivovich    schedule 18.06.2010
comment
Ничего себе, я понятия не имею, почему я этого не видел, должно быть, работал слишком поздно. Спасибо - person trobrock; 22.06.2010