问题标签 [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 回答
161 浏览

r - auto_test 在 testthat 中给出了记者错误

我试图强迫自己对一些我不想开发包的数据分析项目进行更多的单元测试。所以,我一直在玩testthatR 包。我有一个code文件夹,里面是一个src和一个test文件夹。在src文件夹中,我有add.R具有此功能的文件:

test文件夹中,我有test-add.R包含以下内容的文件:

以下工作正常...

但我希望能够使用该auto_test功能,因为随着项目的发展source/test_file会变得乏味。但是当我尝试时,auto_test我得到了这个......

我确定我错过了一些简单的东西,但是什么?

0 投票
2 回答
3344 浏览

r - R testthat 单元测试数据和辅助函数约定

我正在编写一个 R 包,并且正在使用 testthat 进行单元测试。我的许多单元测试都是用于测试在特定于我的包的特定对象上工作的功能。对于这些测试,我制作了一个辅助函数来设置一个模拟对象。我还有其他一些辅助函数来减少单元测试中的代码量。

目前,这些帮助函数位于我的R/文件夹中,因为它们可用于我的单元测试文件(位于 中tests/testthat/)。我觉得将仅用于单元测试的函数放在R/文件夹中有点奇怪。如果可以将它们放在tests/文件夹中的某个位置,那就太好了。但似乎这样做会使它们在单元测试期间不可用。请注意,这些辅助函数用于多个不同的测试文件,因此仅将辅助函数放在包含单元测试的文件的顶部并不是解决方案。

另一个相关的问题是在哪里放置用于单元测试的数据文件。例如,我的一些函数适用于包中的ExpressionSet对象limma(在Bioconductor上可用),我在使用该load()函数进行单元测试期间将其加载到 R 中。目前我将它们放在inst/extdata文件夹中,因为这样我可以system.file()在单元测试期间访问它们。此文件夹还包含其他数据文件,这些文件是为包的用户准备的。我觉得将我的测试数据(不适合最终用户)放置在与包数据相同的位置(用于最终用户)有点奇怪。

所以我的问题是,是否可以将单元测试辅助函数和测试数据都放在tests/目录中。如果是这样,我如何从单元测试中访问这些文件?单元测试助手和单元测试数据的最佳实践/约定是什么?

0 投票
1 回答
186 浏览

r - R包的交互式调试

在对包进行修改时,我遇到了以下问题。

假设我对包中的一个功能进行了更改,但我破坏了它。这导致我的单元测试失败(我正在使用 testthat)。但是,如果它不是一个微不足道的错误,并且我想使用 RStudio 的交互式调试器来修复它,我似乎可以这样做的唯一方法是将 unittest 代码剪切并粘贴到我拥有的函数的实际 .R 文件中损坏的驻留并“获取”该文件。这是一个非常烦人的过程。

谁能建议一个更聪明的方法来做到这一点?

0 投票
1 回答
231 浏览

r - 测试 .Rbuildignore + 外部文件(注意)

使用 testthat 构建一个包进行测试;那些需要一个外部文件,推荐的位于/tests/testthat/my-file.

然而R CMD check产生

以上为注(Status: 1 NOTE

如果我将 my-file 添加到.Rbuildignore( devtools::use_build_ignore("/tests/testthat/my-file") 则该文件很好,在检查期间被忽略,因此所有测试都失败并且无法构建包。

我该如何解决这个问题?我知道 aNOTE是可以通过的,但我还是想摆脱它。

0 投票
1 回答
3533 浏览

r - 如何使用 R 的 testthat 对单个文件进行单元测试?

我刚刚开始使用 R 进行单元测试,并且发现到目前为止它很难进行。我想做的是进入 R 控制台,输入test()并让 testthat 运行我的 R 包中的所有文件的测试。

这是我的环境:

和目录结构:

带有以下相关文件的样本:

数学.R

添加.R

测试那个.R

test_add.R

错误:

在 R 控制台中,我得到以下结果:

但是,如果我切换工作目录setwd('R')并运行 math.R,doubleAdd功能就很好。此外,如果我删除 math.R 或将 math.R 从“R”目录中移出,test()也可以正常工作。

我应该如何设置这些文件来test()为我的所有 R 文件运行测试?

0 投票
0 回答
139 浏览

r - test_that 调用内部的评估

我正在尝试为我的包编写一些单元测试,并且很难对gls功能进行测试nlme。MWE:

由于某种原因,getData调用无法在测试环境中找到数据。这是回溯:

然而,在外部评估相同的代码test_that不会导致错误:

0 投票
2 回答
704 浏览

r - How to test for a message and an error message simultaneously in R testthat?

I'm looking to unit test a function that produces a connection. It outputs a message that contains the connection details during execution.

I want to test the following:

  1. The message appears as expected (expect_message(fn(),"blah"))
  2. There is no error (expect_error(fn(),NA))
  3. Object created is a specific class (expect_is(fn(),"PostgreSQLConnection"))

I could do res<-fn() and then do the expect_is() from it, but how can I perform tests on both the message and the (lack of an) error whilst calling the function.

Ideally, I'd like to evaluate all three simultaneously and in such a way I could then safely close the connection afterwards.

PS The expect_message and expect_error functions use functions like throws_error which may or may not be deprecated- the docs are a little confusing on that point. ?throws_error

0 投票
1 回答
1298 浏览

r - r - data.table 和 testthat 包

我正在构建一个与 data.table 一起使用的包,并且应该使用包 testthat 对其进行测试。虽然从命令行调用时代码工作正常,但从测试用例调用时遇到问题。似乎在运行测试时使用了基本包中的 [] 函数,即 data.frames 的函数。

我创建了一个最小示例,可以在这里找到:https ://github.com/utalo/test_datatable_testthat

该包包含一个功能:

test.datatable.testthat:::test()从命令行调用时,我得到了预期的结果:

但是,在执行以下单元测试时:

我收到一个错误:

如您所见,在测试中调用了 data.frame 的 []。我的第一个猜测是对 data.table 包的依赖没有正确声明。这是我的说明文件:

根据在我自己的包中使用 data.table 包,将 data.table声明为依赖包就足够了。但是,这里的情况似乎并非如此。

关于为什么我的函数在被直接调用而不是在 testthat 的上下文中工作的任何线索?

0 投票
2 回答
1972 浏览

r - 如何使用 testthat 测试已安装的软件包?

我想测试已安装的软件包,但这会返回错误。

test_package ( source here ) 返回此错误,因为system.file("tests", package = package)它是空的。实际上,tests安装的软件包中缺少该目录。

如何安装软件包以使其测试目录保持存在?

0 投票
2 回答
407 浏览

r - 在函数/包中使用 data.table(使用 roxygen)

我对 R 很陌生,但似乎这个问题与以下帖子123和有点不同的主题4密切相关。不幸的是,我没有足够的声誉来发表评论。我的问题是,经过那里的所有建议后,代码仍然不起作用:

  1. 我在描述文件中包含了“取决于”
  2. 我尝试了第二种方法,包括更改 NAMESPACE(不可重现)
  3. 我在这里创建了一个示例包 ,其中包含一小部分代码,它显示了一些不同的错误(而不是)"J" not found in routes[J(lat1, lng1, lat2, lng2), .I, roll = "nearest", by = .EACHI]'lat1' not found in routes[order(lat1, lng1, lat2, lng2, time)]
  4. 我使用控制台和 R 脚本测试了所有脚本。在那里,代码运行没有问题。

非常感谢您的支持!

编辑:@罗兰

  1. 你说的对。Roxygen 会覆盖命名空间。您必须包含#' @import data.table该功能。你明白吗,为什么只Depends: data.table在DESCRIPTION文件中插入是行不通的?这可能是文档中的有用提示,还是我错过了?
  2. 更改为 routes <- routes[order("lat1", "lng1", "lat2", "lng2", "time")] 会产生误导,因为这条线突然不再有问题了。是否正确,在这种情况下使用 data.frame 顺序?我会看看我现在能走多远。我会告诉你最后的结果...