Ложно считается ноль в rspec? - PullRequest
3 голосов
/ 08 декабря 2011

В таблице клиентов активно имя поля. Подтверждает, как показано ниже в customer.rb:

validates :active, :presence => true

Вот код rspec для проверки поля short_name:

it "should be OK with duplicate short_name in different active status" do
  customer = Factory(:customer, :active => false, :short_name => "test user")
  customer1 = Factory.build(:customer, :active => true, :short_name => "Test user")
  customer1.should be_valid           
end

Проверка для короткого имени:

  validates :short_name, :presence => true, :uniqueness => { :scope => :active }

Приведенный выше код вызывает ошибку:

  1) Customer data integrity should be OK with duplicate short_name in different active status
     Failure/Error: customer = Factory(:customer, :active => false, :short_name => "test user")
     ActiveRecord::RecordInvalid:
       Validation failed: Active can't be blank
     # ./spec/models/customer_spec.rb:62:in `block (3 levels) in <top (required)>'

Похоже, что ложное значение, присвоенное активному полю, rspec считалось пустым или нулевым и не прошло проверку данных. Пытался использовать 0 для false, и это вызывает ту же ошибку. Случай rspec проходит при удалении проверки для поля active.

1 Ответ

6 голосов
/ 08 декабря 2011

Это не проблема rspec, это связано с проверкой Rails.Я полагаю, что ваше поле active является логическим и, цитируя документацию validates_presence_of:

Если вы хотите проверить наличие логического поля (где реальные значения являются истинными и ложными), вы захотите использовать validates_inclusion_of: field_name,: in => [true, false] Это связано с тем, что Object # blank?обрабатывает логические значенияfalse.blank?# => true

Просто измените ваш валидатор на что-то вроде следующего (при условии, что вы хотите использовать «сексуальный» синтаксис), и он должен работать:

validates :active, :inclusion => [true, false]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...