Есть ли хороший способ проверить обратные вызовы `before_validation` с помощью аргумента`:on` в Rails?
У меня есть 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 ответа
Решение
Я думаю, что вам нужно изменить свой подход. Вы тестируете, что 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