2009-12-04 5 views
2

Alors, prenez le test suivant dans Rspec:Le nouvel enregistrement de Rails? pas réinitialiser (true) si la transaction est annulée

require 'spec_helper' 
describe Author do 
    self.use_transactional_fixtures = false 

    after(:each) do 
    Author.destroy_all 
    end 

    it "should behave normal when using transactions" do 
    my_author = nil 
    begin 
     Author.transaction do 
     my_author = Author.new(:name => "My Name") 
     my_author.new_record?.should be_true 
     my_author.save! 
     raise "some exception" 
     end 
    rescue 
    end 
    Author.count.should == 0 
    my_author.new_record?.should be_true 
    end 
end 

La dernière ligne:

my_author.new_record?.should be_true 

donne:

'Author should behave normal when using transactions' FAILED 
expected true, got false 

au moins lorsque vous annulez la création d'un enregistrement, je m'attends à ce qu'il revienne complètement, ce qui réinitialise le nouvel enregistrement. et l'id aussi. Est-ce que j'ai râté quelque chose? Est-ce que c'est prévu? J'utilise des rails 2.3.5

Répondre

0

Oui, c'est prévu. L'opération de transaction est un bloc de base de données uniquement. Cela ne changera rien à propos de vos objets rubis en mémoire.

+0

new_record? est une méthode censée refléter l'état de la base de données. – gtd

Questions connexes