2015-01-17 52 views
0

試圖測試答案上的投票是否更新其分數。 得分更新,但它不是相同的對象進行測試。 (每個投票都有自己的可投票應答對象,具有相同的.id) 因此規範失敗。 RSpec的測試過程中RSpec記錄屬性不更新

PRY控制檯:

> Answer.first 
=> #<Answer:0x000000087b6418 id: 1, (...) score: 2> 
> answer 
=> #<Answer:0x000000081bea88 id: 1, (...) score: 0> 

vote_spec.rb

answer ||= FactoryGirl.create(:answer) 
vote = FactoryGirl.create(:vote, like: true, user_id: 1, voteable_id: answer.id, voteable_type: "Answer") 
vote2 = FactoryGirl.create(:vote, like: true, user_id: 2, voteable_id: answer.id, voteable_type: "Answer") 
vote3 = FactoryGirl.create(:vote, like: true, user_id: 3, voteable_id: answer.id, voteable_type: "Answer") 
vote4 = FactoryGirl.create(:vote, user_id: 4, voteable_id: answer.id, voteable_type: "Answer") 

expect(answer.score).to eq(2) 

vote.rb

after_create :set_voteable_score 

    private 

    def set_voteable_score 
    self.voteable.update_column(:score, count_score(self.voteable)) 
    true 
    binding.pry 
    end 

    def count_score(voteable) 
    votes = voteable.votes.all 
    votes.where(like: true).count - votes.where(like: false).count 
    end 

所以如果我用所有投票(vote,vote2,vote3 ...)檢查vote.voteable.score,每個都會返回一個不同的可投票對象,而vote_spec.rb中的答案不會更新。

爲什麼會出現這種行爲(存在多個具有相同ID的記錄)?

回答

1

如果所有的可投票都有相同的ID,它們都是相同的記錄。然後你可能會有不同的記錄的實例,這些記錄在不同時間從db中加載。

試試這個:

expect(answer.reload.score).to eq(2)