1
我剛剛學習RoR,並且在單元測試中遇到了一個問題,我寫的一個簡單函數不會適當地修改它的對象。我必須錯過一些非常基本的東西,因爲我在任何論壇上都看到過這個問題。使用函數修改ActiveRecord模型
我用rake通過「rake test test/functional/song_test.rb」運行我的測試。數據從yaml文件加載,似乎是正確的。但是當我打電話給我的「投票!」時函數(見下文)修改屬性@rating,測試中的變化不可見,並且我的斷言失敗。
test "vote!" do
song1 = songs(:song1) # 'songs' was loaded from a yaml file
assert song1.respond_to?('vote!'), "Can't vote!()!"
assert_equal 5, song1.rating, "Rating is wrong" # assertion passes
song1.vote!(1)
assert_equal 1, song1.rating, "Rating should be 1" # assertion fails
end
這裏是失敗消息:
SongTest#test_vote! = 0.00 s
1) Failure:
test_vote!(SongTest) [/test/functional/song_test.rb:35]:
Rating should be 1.
<1> expected but was
<5>.
我與看跌期權()的變化不會投票中出現驗證!功能。但是在函數返回之後,song1.rating的值沒有改變。這是與投票類!功能。
class Song < ActiveRecord::Base
validates :rating, :presence => true
def vote!(num_stars)
@rating = num_stars
end
end
我在想,有兩個副本的對象莫名其妙地投票!函數在臨時對象上被調用。但我不明白這將是怎樣或爲什麼。
謝謝! (對於這兩個提示!) – user823981