2015-07-21 66 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