问题标签 [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 投票
1 回答
238 浏览

r - 由于 ~/.Rprofile 而在 check() 上测试该错误,但在 test() 上却没有?

编辑:

是否有可能~/.Rprofile没有加载在check(). 看起来我的整个过程都失败了,因为~/.Rprofile没有加载。

完成编辑

我在使用testthat. 实际上,当我测试我的包时test()一切正常。但是当我测试时,check()我收到一条错误消息。

错误消息说:

在此错误之前,我获取了一个定义subfolder_prefix变量的脚本,我想这就是它在这种test()情况下工作的原因。但我希望它也能在check()函数中运行。

我会把完整的测试脚本贴在这里,希望不要太复杂:

在我的脚本中,我定义了变量subfolder_prefix <- 'IC_',并在测试中检查是否为每个原始文件创建了相同数量的文件夹......这就是我的脚本应该做的......

所以正如我所说,我不确定如何在这里调试这个问题,因为test()工作但check()在运行测试期间失败。

0 投票
2 回答
405 浏览

r - 我可以从 roxygen2 示例中自动为 testthat 生成单元测试吗?

我正在为 R 开发 PKNCA 包。在开发测试代码时,一些测试也是很好的例子。我想同时保留它们(测试和示例)。有没有办法可以在 roxygen2 文档中嵌入一些东西,这些东西也会被复制到测试中?

我正在考虑的是文档,例如:

这将产生一个测试,如:

(tol 来自于它是一个数字和示例中显示的位数的事实。)

0 投票
0 回答
491 浏览

r - 在 testthat 测试中加载包的推荐做法是什么?

在名为“不要附加 dplyr 后端”的提交中,Hadley Wickham 从加载的包中删除了直接函数调用。可能是为了确保不直接加载包,他将函数调用更改为packagename::function().

我在他关于测试包的一本书中没有找到关于这一点的迹象。

对于我很少使用的函数,我会以这种形式调用它们packagename::function()。但我想知道我倾向于大量使用的包,例如 dplyr (magrittr) 包中的链接运算符。这些包应该

  1. 被加载tests/test-that.R
  2. 或在每个测试文件中tests/testthat/test-file.r
  3. 还是应该通过文件中指定的我的包的必需导入来导入它们DESCRIPTION
0 投票
1 回答
393 浏览

r - 如何测试自定义期望?

假设我想要一个自定义的testthat期望。例如,我正在测试大量对象以查看它们是否没有缺失值。写东西的testhat方式应该是这样的:

我如何测试这是正确的?

我可以编写通过的测试,没问题。

我以为我可以将自定义期望包装在 中expect_error,但这不起作用:

包裹它try也不起作用。

如何测试失败的案例?(要记住的重要一点是,我们正在测试是否expect_no_nas有效,而不仅仅是编写使用 . 的测试expect_no_nas。)

0 投票
1 回答
67 浏览

r - 在 testthat 中包含变量修改的跟踪

我有两个函数,其中一个函数根据参数以半递归方式调用另一个函数。

我想根据参数跟踪每个函数被调用的次数,然后将其作为单元测试的一部分使用testthat.

我可以跟踪使用自定义环境进行了多少次调用,并且trace(请参阅此处了解我之前所做的),如上一个SO 问题所示

这很好用,直到我添加testthat环境的复杂性。

如果我把

无论是在块外还是在test_that块内,然后devtools::test()rstudio中运行或ctrl-shift-t,在特殊环境下测试,我会得到. 我意识到这都是and环境之间的相互作用,但我无法破译它。count_env not foundtracetestthat

我也尝试过使该count_env对象成为包本身的未导出对象,但这似乎也不起作用。

这个repo 有一个包含这两个函数的最小包和一个testthat测试目录来使用它。

任何关于从这里去哪里的帮助都会很棒。

0 投票
1 回答
233 浏览

r - 使用 match.fun 的 test_that 在使用两层深度时会引发意外错误

我在嵌套函数中与whenmatch.fun一起使用时遇到问题。为了说明,我构建了一个包含两个函数的快速玩具示例 R 包。后者简单地调用前者:test_thatmatch.fun

然后我编写testthat了如下测试:

第一次测试很好,但第二次测试出错。的输出testthat

我不明白为什么第一次测试通过但第二次测试失败。事实上,直接从控制台运行失败的测试就可以了:

我知道它与环境有关,但我希望在match.fun搜索两个环境后它会起作用。知道我在这里缺少什么吗?在此先感谢您的帮助。

0 投票
2 回答
1293 浏览

r - 当条件不满足时跳过所有测试

使用 testthat/devtools 基础结构时,跳过 R 包的 test 目录中的所有测试的正确方法是什么?例如,如果没有与数据库的连接并且所有测试都依赖于该连接,我是否需要skip在所有文件中单独写入 a 或者我可以在skip某处写入一个?

我有一个标准的包设置,看起来像

我的包裹/

  • ... # 其他包的东西
  • 测试/
    • 测试那个.R
    • 测试/
      • 测试东西1.R
      • 测试-thing2.R

起初我以为我可以在testthat.R文件中进行测试,例如

但是,这不起作用,看起来调用devtools::test()只是忽略了该文件。我想另一种方法是将所有测试存储在另一个目录中,但是有更好的解决方案吗?

0 投票
1 回答
752 浏览

r - 使用 data.table 和 testthat 时出错

我目前正在为我的包构建一系列测试,并希望构建以下测试以确保函数在 data.table 中工作。测试如下:

请注意,函数findHorrificValues()定义为:

当作为脚本执行时,代码没有问题,但是当将脚本作为测试执行时,我收到以下错误:

我已确保 data.table 在我的包描述中既是导入也是依赖。由于正在调用 data.table 函数,因此它似乎不是问题的根源。知道是什么导致了错误吗?这可能是 testthat 和 data.table 组合的问题(两个包中的函数都出现在堆栈跟踪中)吗?

0 投票
1 回答
464 浏览

r - R:如何使用 testthat 测试依赖于外部程序的函数?

我有一个bowtieIndex(bowtieBuildLocation, filename)调用 bowtie2-build 的函数。它的参数是我系统上的 bowtie2-build 位置和输出文件名。

如何在不硬编码 bowtie2-build 位置的情况下为此功能编写测试?

0 投票
3 回答
845 浏览

regex - 如何使用 testthat 以未知顺序测试多个警告?

当警告的顺序可能不同时,我想测试一个函数是否会生成多个警告(4 个或更多)。我最好的尝试是基于前瞻正则表达式匹配。简化为只有 2 个警告,我知道我的 RegExp 在单个字符串输出上工作,因为以下两个都是正确的:

但是,这在测试多个警告时不起作用testhat::expect_warning

我怀疑这是因为内部expect_warning正在做一些事情,比如分别针对每个警告测试给定的 RegExp——为什么expect_warning( ... all=TRUE )参数可能是有意义的。

不幸的是,我不能将它与 RegExp 等一起使用"1 | 2";如果只给出一个警告就成功了。

我还想避免多次运行该函数并每次测试不同的警告。测试真正的功能需要大量的设置和拆卸代码。它与文件系统进行大量交互,并且因为它是我正在测试的文件系统警告,所以我不能模拟它。此外,我想在多种情况下测试警告,每种情况都需要不同的设置和拆卸代码,所以这很快就会使我的测试膨胀。

关于如何一次简单地测试多个警告的任何建议?