2009-02-11 48 views
0

我是Rails的新手,我知道它內置了諸如單元測試等內容。但我有興趣做一些更簡單的測試,它們與您的「printf」所以我正在測試我編寫的登錄頁面,並且想要跟蹤代碼以查看每行如何查找我的find方法正在返回。我嘗試用「puts」輸出,但是我沒有在命令行中得到任何東西。Rails中的「Printf」測試

回答

10

我一直使用puts語句以及ruby調試器!這很棒。

在rails中,你可以做幾件事情。我在代碼中加入了「puts」,當我在命令行運行腳本/服務器時,輸出顯示在我的Terminal.app中。我正在運行Mac,但我確信有一種類似的方式可以在您選擇的平臺上跟蹤您的應用程序的活動。

另一種選擇是使用記錄器語句。您可以撥打

logger.debug("My #{variable}") 

並在您的log/development.log文件中找到這些語句。另外,如果您在* nix系統上運行,則可以使用「tail」命令逐個跟蹤寫入日誌的最後一條語句。

tail -f log/development.log 

這樣你就可以寫出你的陳述,並看到他們發生的事情。有記錄的幾個層次:

logger.warn 
logger.info 
logger.debug 
logger.fatal 

每個環境(開發,測試,生產)將決定記錄的是什麼「級別」將被調用,所以你可能會寫與logger.debug日誌報表威利願意不願意,而在發展,但基於默認日誌級別部署時,這些日誌語句將不會寫入。

+0

謝謝。所以,這些語句確實起作用,我只是寫了糟糕的代碼,這意味着它被跳過了! – alamodey 2009-02-11 02:07:30

1

您是否熟悉ruby-debug?

  1. 安裝ruby-debug寶石。
  2. 使用-u選項啓動服務器。

    腳本/服務器要停止-u

  3. 將一個debugger聲明在你的代碼。
  4. 您將擁有對變量的控制檯訪問權限,並且可以逐步執行代碼。

查看ruby-debug documentation瞭解更多詳情。

3

用戶是這樣的:

logger.info "method called with #{params.inspect}" 

(你可以把任何變量#裏面{})

當您遇到好玩,看看./script/console和紅寶石-debug

0

我做這個之前 - 有乘客,你沒有腳本/服務器的輸出,所以我寫了這個:

# extras/sexy_logging.rb 
module SexyLogging 
    def log(text) 
    return true if RAILS_ENV == 'production' 

    string = "\e[0;32mLog:\e[m #{text}" 

    (100 - string.length).times do 
     string << ' ' 
    end 
    string << "(#{caller.first})" 

    logger.debug string 
    end 
end 

ActiveRecord::Base.send    :include, SexyLogging 
ActionController::Base.send   :include, SexyLogging 

然後,你可以寫

log variable 

log 'Testing user' 

tail -f log/development.log |grep Log: 

並且只能看到你正在記錄的內容,逐行和顏色。