rspec заглушить ошибки. - PullRequest
       5

rspec заглушить ошибки.

2 голосов
/ 15 марта 2012

У меня есть свойство даты для модели под названием «транзакция», когда я сохраняю ее, я хочу проверить, находится ли она в пределах диапазона, а если нет, установить дату предыдущей транзакции.

Это работает, но я не могу заставить мой тест работать, он продолжает бомбить при добавлении ошибки. Есть ли способ заглушить строку «errors.add», чтобы я мог изолировать свой тест, чтобы проверить, правильно ли изменилось значение tran_date?

  def tran_date_within_financial_year
    range = ledger.fin_start..ledger.fin_end
    unless range === tran_date
      tran = Transaction.all.order("created_at").last
      self.tran_date = tran.tran_date
      errors.add(:tran_date, "is outside financial year")
    end
  end

Вот мой тест

context "date is empty" do
  it "should set date to previous transaction" do
    @prev_tran = Transaction.make!(:tran_date => Date.new(2012,02,03))
    @tran = Transaction.make!(:tran_date => "")
    @tran.save
    @tran.reload.tran_date.should eq(@prev_tran.tran_date)
  end
end

Результат при запуске rspec:

  1) Transaction Saving a transaction date is empty should set date to previous transaction
     Failure/Error: @tran = Transaction.make!(:ledger => ledger, :tran_date => "")
     ActiveRecord::RecordInvalid:
       Validation failed: Tran date is outside financial year

Однако, если я закомментирую функцию error.add, мой тест пройдет успешно. Таким образом, он корректно устанавливает значение на предыдущую дату транзакции. Проблема в error.add останавливает тест все вместе.

1 Ответ

0 голосов
/ 15 марта 2012

Ну, в спецификации просто подчеркивается, что вы не можете сохранить недопустимый объект.

И объект недействителен, потому что вы добавляете в него ошибки.

Эти спецификации должны пройти:

context "date is empty" do
  it "should set date to previous transaction" do
    @prev_tran = Transaction.make!(:tran_date => Date.new(2012,02,03))
    @tran = Transaction.make(:tran_date => "")
    @tran.should_not be_valid
    @tran.errors.should have_key :tran_date
    @tran.tran_date.should eq(@prev_tran.tran_date)
  end
end
...