2011-06-21 59 views
0

所以..這裏是我的單元測試文件的頂部。Ruby on Rails 2.3.8:測試:實例變量無,在類的頂部聲明時?

class ObjectTest < ActiveSupport::TestCase 
    @user = -1 

失敗測試(也使用的第一個@user)

test "for detection of first content" do 
    puts "+++++++++++++++++++++++++++++ #{@user.name}" 

這是我得到

NoMethodError: undefined method `name' for nil:NilClass 

現在的錯誤,我知道一個數字可以沒有任何像.name這樣的屬性,但是我試圖解決一個與試圖獲取整數名稱無關的問題。問題是,在na測試開始時,我的測試文件中任何位置定義的實例變量立即變爲零 - 儘管如此,測試的實際內容並不重要,@user內的數據正在以某種方式消失。 = \

回答

2

類的實例變量有點奇怪,我沒有使用過它們,但是如果我正確地使用它們,它們就存在於類本身上,只能在類方法中用@符號訪問 - 因此當您處於實例方法時,您將不得不訪問@user作爲ObjectTest.userself.class.user,否則Ruby將查找實例方法內部的實例實例變量。換句話說,在類函數中,您可以參考@user,但在實例函數中,Ruby正在尋找實例上的@user變量。 here是一個似乎證明這種行爲的頁面。由於類變量(例如@@user)使用完全不同的語法,因此它們不應顯示此範圍 - 碰撞行爲 - 您可以在類和實例方法中都使用@@user

+0

你先生,太棒了。我以爲我知道如何使用這些。大聲笑 – NullVoxPopuli