Я изначально написал тестовый код, подобный следующему:
fixtures :records
it "should double number of records " do
@payment_transactions = PaymentTransaction.find :all
length = @payment_transactions.length
lambda{
@payment_transactions.each{ |pt|
PaymentTransaction.create(:data => pt.data)
}
}.should change{PaymentTransaction.find(:all).length}.from(length).to(length * 2)
end
=>
# 'PaymentTransaction should double number of records ' FAILED
# result should have been changed to 202, but is now 101
Но по какой-то причине это не сработало.
Затем я поставил лямбду и .each по-другому, как показано ниже, потому что я догадался, что munupilation данных в .each ничего не сделал.
it "should increase number of records by one for each time when creating a new record" do
length = PaymentTransaction.find(:all).length
@payment_transactions.each{ |ph|
lambda{
PaymentTransaction.create(:data => ph.data)
}.should change{PaymentTransactionfind(:all).length}.by(1)
}
end
Кто-то знает, что вызывает странное поведение первого?