создание записей в .each в lambda {} не меняет количество записей в RSpec - PullRequest
0 голосов
/ 22 июля 2010

Я изначально написал тестовый код, подобный следующему:

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

Кто-то знает, что вызывает странное поведение первого?

1 Ответ

1 голос
/ 24 июля 2010

Могу ли я предложить вам попробовать этот код:

it "should double number of records " do

  initial_count = PaymentTransaction.count

  lambda{
    PaymentTransaction.all.each{ |pt| 
      PaymentTransaction.create(:data => pt.data)
    }
  }.should change(PaymentTransaction, :count).from(initial_count).to(initial_count * 2)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...