Простой тест Rspec для положительного числа просто не пройдет - PullRequest
0 голосов
/ 21 апреля 2011

Я новичок в рельсах и пытаюсь написать свое первое приложение. У меня есть таблица со столбцами order_size: целое число и цена: десятичное (8,5). Столбец цены содержит цены на валюту, поэтому он должен быть очень точным, если вам интересно. Я пытаюсь написать тесты, чтобы убедиться, что цена и order_size являются положительными числами, но что бы я ни делал, они не пройдут.

Вот тесты Rspec

it "should require a positive order size" do
  @attr[:order_size] = -23
  @user.orders.create!(@attr).should_not be_valid
end

it "should require a positive price" do
  @attr[:price] = -1.2908
  @user.orders.create!(@attr).should_not be_valid
end

Вот валидации класса Order

  validates_presence_of :user_id
  validates_numericality_of :order_size, :greater_than => 0,
                            :only_integer => true
  validates_numericality_of :price, :greater_than => 0

Вот результаты теста

Failures:

  1) Order validations should require a positive order size
     Failure/Error: @user.orders.create!(@attr).should_not be_valid
     ActiveRecord::RecordInvalid:
       Validation failed: Order size must be greater than 0
     # ./spec/models/order_spec.rb:39:in `block (3 levels) in <top (required)>'

  2) Order validations should require a positive price
     Failure/Error: @user.orders.create!(@attr).should_not be_valid
     ActiveRecord::RecordInvalid:
       Validation failed: Price must be greater than 0
     # ./spec/models/order_spec.rb:44:in `block (3 levels) in <top (required)>'

Что именно здесь происходит? Я даже пытался запустить тест, утверждая, что они должны быть be_valid, но они все равно не работают. Любая помощь будет оценена.

Ответы [ 3 ]

3 голосов
/ 21 апреля 2011

Мне кажется, что создание записей терпит неудачу из-за ваших проверок и, следовательно, никогда не доходит до вашего утверждения!Как указывает аппендиат, вы хотите сделать:

order = Order.new(:order_size => -23)
order.should_not be_valid
0 голосов
/ 29 апреля 2011

Есть несколько способов написать этот тест.Вы используете метод create!, который вызовет исключение при сбое.Таким образом, в этом случае вы бы написали свой тест следующим образом:

it "should require a positive order size" do
  @attr[:order_size] = -23
  expect { @user.orders.create!(@attr)}.to raise_error(ActiveRecord::RecordInvalid.new)
end

Но, на самом деле, тот факт, что create! вызывает исключение, когда order недопустим, зависит от рельсов,так что я бы на самом деле проверил это, как предложено @ mharper.

0 голосов
/ 21 апреля 2011

почему вы звоните create!, просто звоните new

Или измените свой тест, чтобы ожидать сбоя создания.

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