Ошибка проверки Rspec - атрибут не может быть пустым, но не пустым - PullRequest
10 голосов
/ 16 октября 2011

Я только что написал тест для тестирования, если создание нового пользователя также состоит из настроек администратора.Вот тест:

describe User do

  before(:each) do
    @attr = { 
      :name => "Example User", 
      :email => "user@example.com",
      :admin => "f"
    }
  end

  it "should create a new instance given valid attributes" do
    User.create!(@attr)
  end

  it "should require a name" do
    no_name_user = User.new(@attr.merge(:name => ""))
    no_name_user.should_not be_valid
  end

  it "should require an email" do
    no_email_user = User.new(@attr.merge(:email => ""))
    no_email_user.should_not be_valid
  end

  it "should require an admin setting" do
    no_admin_user = User.new(@attr.merge(:admin => ""))
    no_admin_user.should_not be_valid
  end

end

Затем в моей модели пользователя у меня есть:

class User < ActiveRecord::Base
  attr_accessible :name, :email, :admin

  has_many :ownerships
  has_many :projects, :through => :ownerships

  email_regex = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i

  validates :name, :presence => true,
                   :length => { :maximum => 50 }

  validates :email, :presence => true,
                    :format => { :with => email_regex },
                    :uniqueness => { :case_sensitive => false }

  validates :admin, :presence => true

end

Я явно создал нового пользователя с настройкой администратора, так почему он говорит, что это ложно?Я создал миграцию для настройки администратора как admin: логический.Я сделал что-то не так?

Вот ошибка:

Failures:

  1) User should create a new instance given valid attributes
     Failure/Error: User.create!(@attr)
     ActiveRecord::RecordInvalid:
       Validation failed: Admin can't be blank
     # ./spec/models/user_spec.rb:14:in `block (2 levels) in <top (required)>'

Как ни странно, когда я закомментирую, проверяет: admin, :sence => true, тест создает пользователя правильно, но не удаетсяon "Пользователю необходимо указать настройки администратора"

РЕДАКТИРОВАТЬ: Когда я изменяю значение @attr: admin на "t", это работает!Почему не работает, когда значение ложно?

1 Ответ

25 голосов
/ 16 октября 2011

Из направляющих рельсов :

С false.blank?Значение true, если вы хотите проверить наличие логического поля, вы должны использовать validates: field_name, :lusion => {: in => [true, false]}.

В основном это выглядиткак ActiveRecord преобразует ваше «f» в false перед проверкой, а затем запускает false.blank? и возвращает true (что означает, что поле НЕ присутствует), что приводит к сбою проверки.Итак, чтобы исправить это в вашем случае, измените свою валидацию:

validates :admin, :inclusion => { :in => [true, false] }

Мне кажется, это немного хакерски ... надеюсь, разработчики Rails пересмотрят это в будущем выпуске.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...