问题标签 [testthat]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
4109 浏览

r - 如何测试函数的图形输出?

我想知道如何测试产生图形的功能。我有一个简单的绘图功能img

在我的包中,我喜欢使用testthat. 因为plot和它在基础图形中的朋友只是返回NULL一个简单 expect_identical的不起作用:

首先,我考虑将绘图写入文件并比较 md5 校验和以确保函数的输出相等:

这在 Linux 上运行良好,但在 Windows 上却不行。令人惊讶 的是md5plot(plot(1:10)),每次调用都会产生一个新的 md5sum。除了这个问题,我需要创建很多临时文件。

接下来我使用recordPlot(首先创建一个空设备,调用绘图函数并记录其输出)。这按预期工作:

有人知道测试函数图形输出的更好方法吗?

编辑:关于@josilber 在他的评论中提出的观点。

虽然该recordPlot方法效果很好,但您必须在单元测试中重写整个绘图功能。对于复杂的绘图功能,这变得很复杂。如果有一种方法可以存储包含图像的文件(*.RData或,...),您可以在以后的测试中进行比较。*.pdfmd5sum方法不起作用,因为 md5sum 在不同平台上有所不同。通过recordPlot您可以创建一个*.RData文件,但您不能依赖它的格式(来自recordPlot手册页):

记录图的格式可能会在 R 版本之间发生变化。记录的绘图不能用作 R 绘图的永久存储格式。

也许可以存储图像文件(*.png,*.bmp等),将其导入并逐个像素进行比较...

EDIT2:以下代码说明了使用 svg 作为输出的所需参考文件方法。首先需要的辅助函数:

测试将是:

可悲的是,这不适用于不同的平台。svg 元素的顺序(和名称)在 Linux 和 Windows 上完全不同。

pngjpeg也存在类似问题recordPlot。生成的文件在所有平台上都不同。

目前唯一可行的解​​决方案是上述recPlot方法。但因此我需要在我的单元测试中重写整个绘图函数。


PS:我对 Windows 上的不同 md5sum 感到完全困惑。似乎它们取决于临时文件的创建时间:

0 投票
2 回答
2055 浏览

r - 在哪里放置用于测试的外部文件

假设我有这样的测试:

而这个测试依赖于一个外部文件test.txt,那么我应该把这个文件放在哪里呢?

0 投票
0 回答
333 浏览

r - 对象在 testthat 测试中未发现错误

这是代码:

测试在 reple 中通过,但在 testthat 上下文中失败,为什么?

这是错误消息:

0 投票
3 回答
5786 浏览

r - 如何为 ggplot 图编写测试

我有很多生成绘图的函数,通常使用 ggplot2。现在,我正在生成绘图并测试基础数据。但我想知道是否有合理的方法来测试绘图是否包含我期望的图层/选项,或者图形元素是否符合预期。

例如:

这就是我卡住的地方

也许有更直接的方法?

0 投票
1 回答
271 浏览

r - 使用 testthat 在测试前后运行代码片段

我有一组从 Ruby 应用程序调用的 R 函数,并想测试它们。R 函数从 Postgres 数据库访问数据,因此要编写测试,我需要使用一些示例数据填充测试数据库。

我想避免在每个测试用例中清理数据库。如果我可以在每次测试之前启动事务并在之后回滚事务,那就太好了。

此页面http://r-pkgs.had.co.nz/tests.html的“编写测试”部分的最后一段让我认为不可能在每个测试用例之前执行代码块。

有谁知道任何创造性的工作?我正在考虑分叉项目并添加功能,但想确保我不会重新发明轮子。

0 投票
0 回答
445 浏览

r - 使用 ggplot 生成的单元测试 ( testthat ) 图

testthat对使用 ggplot2 生成的图进行单元测试(R 包)的最佳方法是什么?

我将使用固定数据,因此将使用 equal 将输入表 dt 验证为 ggplot2。

我知道:

  • 单元测试需要单独进行
  • 我们需要验证数据是否正确传递给ggplot?
0 投票
1 回答
507 浏览

r - 在二进制 R 包中包含测试

我正在testthat为我的 R 包编写单元测试。我见过一些包作者(比如来自Rcppand的那些ggplot2)用二进制文件分发他们的单元测试。devtools但是,当我使用 RStudio (0.98.1102) 和(1.7.0)构建我的包时,该tests文件夹不包含在 zip 文件中。我是否必须手动添加文件夹,或者是否可以通过设置某些选项自动完成此操作?

顺便说一句:我在使用 R v3.1.2 和 RTools v3.1.0.1942 的 Win7 机器上。

0 投票
2 回答
3120 浏览

r - 在 RStudio 中调试“testthat”测试

运行测试时是否可以在 RStudio 中调用调试器testthat?我还没有找到一个允许这个的设置(在devtools设置中“使用包功能,如果可用”的各种组合,点击“构建 - >更多”菜单中的“测试包”选项,test()在控制台中运行,打电话browser()等),但还没有找到方法。

我还发现自己在测试时迷失了很多,不确定正在运行的代码是否已安装在系统库中(通过执行“构建和重新加载”),或者正在从本地目录原位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询问(我也没有回应)。

0 投票
3 回答
96 浏览

r - 在 ESS 中的缓冲区保存上运行 Rdevtool::test_that

我的工作流程:

  • 破解 .R 或 test_*.R 文件
  • 保存缓冲区。
  • 使用 *R* 进程切换到窗口
  • 击中 Cp,RET。重新评估devtools::test()

对我来说,这似乎太艰巨了。devtools::test()为什么我保存缓冲区时不能让 R 自动运行?请帮忙,我的手指几乎无法承受额外的七次击键的压力!

0 投票
1 回答
243 浏览

r - 测试 Markdown 脚本的代码块

我有一个包含多个代码块的降价脚本,并将此脚本与我的包一起提供。我想包括对这些代码块的单元测试或任何确保我的降价脚本始终运行的方法。

有没有人尝试过或者可以推荐一种测试降价脚本的方法?