Пессимистическая блокировка не работает должным образом с перезагрузкой (используется в тестовых примерах).with_lock
и reload
не работают вместе, и тестовые случаи терпят неудачу.Если я удалил with_lock
, тогда тестовые случаи работают нормально.
def method_name1
self.with_lock do
attributes["amount_used"] = get_total_amount_used
attributes["updated_at"] = Time.now.utc
Product.where(:id => self.id).update_all(attributes)
end
end
Я написал тестовые примеры с использованием FactoryGirl.Он вызывает method_name1, который пересчитывает сумму после использованной суммы.Если вы проверите первый тестовый пример 1: total = 600 и amount_used = -200 (-ve означает уменьшение), теперь итоговое значение должно составлять 400,00.Аналогично для «Контрольного примера 2», после выполнения «Контрольного примера 1» общая сумма составляет 400,00.amount_used = 200 (+ ve означает добавление), итого должно быть 600,00.Но в тестовом примере 2 говорится 800.00.
context 'description' do
before(:each) do
@product.total = 600
@product.method_name1
end
it 'is updated automatically if valid' do
@product.amount_used = -200
@product.save
@product.reload
should eq('400.0') #Working
end
it 'is not changed if invalid' do
@product.amount_used = 200
@product.save
@product.reload
should eq('600.0') #Not Working
end
end
Ошибка для тестового примера 2: сбой / ошибка: must eq ('600.0')
expected: "600.0"
got: "800.0"
(compared using ==)