RSPEC: Test de modèles avec des méthodes qui appellent Update_attributes
-
12-11-2019 - |
Question
RSPEC débutant ici.
J'essaie de tester mes modèles, qui ont des méthodes qui utilisent update_attributes
pour mettre à jour les valeurs d'autres modèles.
Je suis sûr que les valeurs sont persistées dans la base de données, mais elles ne font pas passer les spécifications.
Cependant, quand j'inclus quelque chose comme @user.reload
Ça marche.
Je me demande si je fais mal les choses. Plus précisément, comment tester les modèles qui changent les attributs d'autres modèles?
Mise à jour avec le code:
describe Practice do
before(:each) do
@user = build(:user)
@user.stub!(:after_create)
@user.save!
company = create(:acme)
course = build(:acme_company, :company => company)
course.save!
@practice = create(:practice, :user_id => @user.id, :topic => "Factors and Multiples" )
end
describe "#marking_completed" do
it "should calculate the points once the hard practice is done" do
@practice.question_id = Question.find(:first, conditions: { diff: "2" }).id.to_s
@practice.responses << Response.create!(:question_id => @practice.question_id, :marked_results => [true,true,true,true])
@practice.save!
lambda {
@practice.marking_completed
@practice.reload # <-- Must add this, otherwise the code doesn't work
}.should change { @practice.user.points }.by(20)
end
end
fin
Dans la pratique.rb
def marking_completed
# Update user points
user.add_points(100)
self.completed = true
self.save!
fin
Dans user.rb
def add_points(points)
self.points += points
update_attributes(:points => self.points)
fin
Pas de solution correcte
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow