У меня есть система тегов и поле для автоматического увеличения количества вопросов, относящихся к тегу. Я использую Mongoid.Тестирование after_hook с Rspec
Вопрос модель:
class Question
has_and_belongs_to_many :tags, after_add: :increment_tag_count, after_remove: :decrement_tag_count
after_destroy :dec_tags_count
...
private
def dec_tags_count
tags.each do |tag|
tag.dec_questions_count
end
end
и Tag Модель:
class Tag
field :questions_count, type: Integer,default: 0
has_and_belongs_to_many :questions
def inc_questions_count
inc(questions_count: 1)
end
def dec_questions_count
inc(questions_count: -1)
end
Он отлично работает, когда я тестирую его в браузере вручную, он увеличивает и уменьшает tag.questions_count поле при добавлении или удалении теги, но мой тест для модели Question after_destroy всегда выпадает.
it 'decrement tag count after destroy' do
q = Question.create(title: 'Some question', body: "Some body", tag_list: 'sea')
tag = Tag.where(name: 'Sea').first
tag.questions_count.should == 1
q.destroy
tag.questions_count.should == 0
end
expected: 0
got: 1 (using ==)
it {
#I`ve tried
expect{ q.destroy }.to change(tag, :questions_count).by(-1)
}
#questions_count should have been changed by -1, but was changed by 0
нужна помощь ...
Большое спасибо! Я начал немного нервничать, потому что не мог заставить его работать ... – FastIndian