У меня есть метод Rails 4.2.0
, который использует пессимистическую блокировку, чтобы изменить счетчикRSpec изменение ожидания не удается при использовании активной записи пессимистической блокировок
class Foo < < ActiveRecord::Base
def bump!
transaction do
lock!
parent.lock!
lock.counter += 1
parent.counter += 1
save!
parent.save!
end
end
end
Я использую Rspec 3.1
, чтобы проверить это, как так
expect{foo.bump!}.to change(foo, :counter).by(1)
expect{foo.bump!}.to change(foo.parent, :counter).by(1)
сначала change(foo, :counter)
пробных проходов, но второй change(foo.parent, :counter)
сбой, если я не прокомментирую оба lock!
и parent.lock!
Если я переписать ошибочный тест, как это, она проходит
prev_counter = foo.parent.counter
foo.bump!
expect(foo.parent.counter).to eq prev_counter + 1
Почему это не работает с expect{...}.to change
?
Он также работал для меня. Отличное объяснение. –