2015-07-21 64 views
8

運行testthat測試時可以在RStudio中調用調試器嗎?我一直無法找到允許此設置的設置(在設置中使用「使用devtools包裝功能的各種組合」,點擊「生成 - >更多」菜單中的「測試包」選項,運行test()控制檯,撥打電話browser()等),但尚未找到方法。在RStudio中調試'testthat'測試

我也發現自己迷路了很多測試時,無法確定正在運行已安裝在系統庫中的代碼是否(做「構建&刷新」),或從本地R是在原地運行目錄,或者什麼 - 有時RStudio抱怨斷點不能設置,直到包重建(所以我懷疑前者)或不(因此我懷疑後者)。不確定這個問題是否與我的主要問題密切相關。

沒有找到一種方法放入調試器,我最終將測試代碼粘貼到以非常特殊的方式工作的控制檯&中,並基本上在腳中拍攝我的TDD習慣。因此,任何建議將不勝感激 - 如果無法調用調試器,任何建議的解決方法?

我在OS X上以本地模式運行RStudio版本0.99.447,其中R 3.2.1。

編輯 - 我也想知道更多背景的選項,例如「選項X永遠不會支持調試,因爲它在分支進程中運行,所以請嘗試使用其他選項Y.」

更新 - 在這裏沒有迴應,我也問了https://support.rstudio.com/hc/communities/public/questions/204779797-Debugging-testthat-tests-in-RStudio(我也沒有任何迴應)。

回答

5

對我來說,以下工作:

  1. 插入內testthat單元測試某處browser()通話。
  2. 運行devtools::test()從RStudio控制檯(而不是使用從UI「測試包」菜單項)

然後,當測試運行擊中browser()調用,你應該能夠使用environment browser和遍歷代碼。

我還沒有找到一種方法來獲得testthat在斷點停止,但插入browser()調用是一個非常接近的替代品。

要絕對確保你從一個一致的狀態開始,當涉及到裝載包,您可以關閉RStudio,重新打開它,運行「清理和重建」,然後devtools::test()

最後,如果你是一個RStudio包內的工作,你可能想從RStudio support檢查了以下建議:

爲了在你的包有效地進行調試,你還需要確保你的包被編譯--with-keep.source選項。此選項是RStudio中新包的默認值;如果需要手動設置,可以在工具 - >項目選項 - >構建工具中找到它。

+0

「Clean and rebuild」是否指「Build&Reload」?我真的很討厭這個問題,就是我經常不小心在機器上全局安裝我的開發版本。 'dev_mode'是一個解決方案,但有時候我忘了關掉它,因爲它是一個手動過程... –

+1

我很猶豫使用'browser()'方法 - 最近有人在我的團隊中(不是我,謝天謝地!)在他們的代碼中留下了一堆'browser()'語句,這些語句進入了生產環境,這很糟糕。不得不改變代碼來審查它,這是一件令人失望的事情。雖然在這種情況下在測試文件中做得不是很差 - 由於某些原因,當使用devtools :: test()時,斷點在測試文件中不起作用,但它們在代碼文件'R /'目錄。 –

+0

不,還有一個單獨的「清理和重建」命令,據我所知它與「構建和重裝」相同,但執行一些初始清理以進入更可預測的狀態。 – alev