Docs header transparent bg

除錯

除錯 Bundler 可能具有挑戰性,請不要灰心 🤗。

在嘗試除錯之前,請務必遵循 開發設定 文件。

除錯最簡單的方法是列印除錯。將 puts 陳述式放在您想要查看物件或變數的程式碼中的任何位置,您將在主控台輸出中看到您的 puts

這在執行測試時特別有用。

ruby puts "stacktrace: #{caller_locations(0).join("\n")}" puts "@definition: #{@definition}" puts "specification.class.name: #{specification.class.name}" puts "spec.method(:to_checksum).source_location: #{spec.method(:to_checksum).source_location}" # 等

若要瞭解更多列印除錯策略,[TODO:連結至文件]

REPL 除錯

REPL(或讀取-評估-列印迴圈)是一種與您的程式碼互動的方式。

使用 REPL,您可以查看物件和變數的值、堆疊追蹤、方法定義的位置等。

若要使用 REPL,請在您想要查看的地方放置 binding.irb。當您的程式碼到達中斷點時,將開啟一個互動式 irb 主控台。

若要瞭解更多有關使用 IRB 的資訊,[TODO:連結至文件]

互動式除錯

互動式除錯就像 REPL + 能夠逐行推進程式碼執行。

在本地測試 Bundler 時,您可以使用任何您熟悉的除錯器進行互動式除錯。

debugpry-byebug 是常見的最愛。debug 自 v3.1 以來已包含在 Ruby 中。

您只需要將您選擇的除錯器寶石安裝為全域性。然後,您需要在執行本地 Bundler 之前在命令列中載入它。

bash RUBYOPT=-rdebug dbundle # 適用於 debug 寶石 RUBYOPT=-rpry-byebug dbundle # 適用於 pry-byebug

注意 在測試套件中無法進行互動式除錯。大多數測試使用 Open3 在子處理序中執行 Bundler,並將輸出擷取到字串中,這使得即使您能載入它,也無法使用 pry。

本機設定

在本地測試最簡單的方式是設定一個包含 Gemfile 的目錄,然後執行 Bundler shell 別名(有關設定別名的說明,請參閱 開發設定 文件)。

我們建議將此目錄放在 tmp 內,這樣您的本地測試才不會意外提交。

bash cd tmp mkdir [本地測試目錄名稱] && cd [本地測試目錄名稱] dbundle init

然後您應該會有一個 Gemfile,可以根據測試需要進行編輯。

RubyGems 測試案例

預設情況下,初始化的 Gemfile 遠端是 "https://rubygems.org"。您可以新增任何在 rubygems 上託管的 gem,然後執行 Bundler shell 別名 (dbundle) 來測試您的程式碼。

```ruby # frozen_string_literal: true

source “https://rubygems.org”

gem ‘tiny_css’ ```

在您希望偵錯器暫停的任何地方設定中斷點(debugbinding.breakpry-byebugbinding.pry)。執行您的 Bundler shell 別名。

bash RUBYOPT=-rdebug dbundle

您的中斷點將顯示在您的主控台中,並已暫停。

來自本機遠端的 Gem

如果您有一個非常具體的場景想要測試(可能是執行測試套件時失敗的範例),最簡單的方法是使用先前測試套件執行中來自 tmp 的 gem。

如果您尚未執行,請並行執行測試套件。

bash bin/parallel_rspec

然後您會在 bundler/tmp 目錄中找到已建置的 gem,例如 bundler/tmp/1/gems/remote1/

您可以使用指向測試執行中已建置 gem 的檔案來源設定您的 Gemfile。

```ruby # frozen_string_literal: true

source “file:///[路徑到 repo 的 bundler 目錄]/tmp/1/gems/remote1/”

gem “rack”, ‘=0.9.1’ ```

然後您可以像從 RubyGems 來源擷取 gem 時在先前範例中所做的那樣進行測試。

在 GitHub 上編輯此文件,如果您發現錯誤或注意到有遺漏之處。