У меня был метод в модели:
class Article < ActiveRecord::Base
def do_something
end
end
У меня также был unit test для этого метода:
# spec/models/article_spec.rb
describe "#do_something" do
@article = FactoryGirl.create(:article)
it "should work as expected" do
@article.do_something
expect(@article).to have_something
end
# ...several other examples for different cases
end
Все было в порядке, пока я не нашел лучше переместить этот метод в обратный вызов after_save
:
class Article < ActiveRecord::Base
after_save :do_something
def do_something
end
end
Теперь все мои тесты об этом методе сломаны. Я должен исправить это:
- Не более конкретный вызов
do_something
, потому чтоcreate
илиsave
также вызовет этот метод, или я встречу повторяющиеся действия db. - Измените
create
наbuild
- Test reply_to
-
Используйте общий
model.save
вместо индивидуального вызова методаmodel.do_something
describe "#do_something" do @article = FactoryGirl.build(:article) it "should work as expected" do expect{@article.save}.not_to raise_error expect(@article).to have_something expect(@article).to respond_to(:do_something) end end
Тест прошел, но я беспокоюсь не о конкретном методе. Эффект будет смешанным с другими обратными вызовами, если будет добавлено больше.
Мой вопрос: есть ли какой-либо красивый способ проверить методы экземпляра модели независимо, что становится обратным вызовом?