Есть ли хороший способ проверить обратные вызовы `before_validation` с аргументом`: on` в Rails? - PullRequest
6 голосов
/ 06 апреля 2011

У меня есть before_validation :do_something, :on => :create в одной из моих моделей.

Я хочу проверить, что это происходит, и не происходит на :save.

Есть ли краткий способ проверить это (используя Rails 3, Mocha и Shoulda), не делая что-то вроде:

context 'A new User' do
  # Setup, name test etc
  @user.expects(:do_something)
  @user.valid?
end

context 'An existing User' do
  # Setup, name test etc
  @user.expects(:do_something).never
  @user.valid?
end

Не могу найти что-либо в API-интерфейсе musta, и это выглядит довольно НЕ СУХОЙ...

Есть идеи?Спасибо:)

Ответы [ 2 ]

9 голосов
/ 06 апреля 2011

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

Например, если бы у меня был этот довольно глупый класс:

class User
  beore_validation :do_something, :on => :create

  protected

  def do_something
    self.name = "#{firstname} #{lastname}"
  end
end

Я бы на самом деле протестировал его так:

describe User do
  it 'should update name for a new record' do
    @user = User.new(firstname: 'A', lastname: 'B')
    @user.valid?
    @user.name.should == 'A B' # Name has changed.
  end

  it 'should not update name for an old record' do
    @user = User.create(firstname: 'A', lastname: 'B')
    @user.firstname = 'C'
    @user.lastname = 'D'
    @user.valid?
    @user.name.should == 'A B' # Name has not changed.
  end
end
3 голосов
/ 10 августа 2013

Вам могут понравиться совпадения обратного вызова musta .

...