如何为R CMD check设置testthat?

21

显然,有两种方法可以将 testthatR CMD check 集成。但我无法使任何一种方法生效。

方法1:(可能已过时)

根据devtools wiki的说法:

当开发一个包时,请将测试放在 inst/tests 中,并创建一个名为 tests/run-all.R 的文件(注意必须是大写 R),其中包含以下代码:

library(testthat) 
library(mypackage)
test_package("mypackage") 

这将在包命名空间中评估您的测试(因此您可以测试非导出函数),如果有任何测试失败,它将抛出错误。这意味着您将看到所有测试失败的完整报告,并且除非所有测试都通过,否则R CMD check 将无法通过。
整个软件包可在这里找到。其中包含两个文件:
## minimalbugexample/inst/tests/run-all.R
library(testthat)
library(minimalbugexample)
test_package('minimalbugexample')

并且

## minimalbugexample/inst/tests/test-use-Matrix-package.R
context("Intentional break")
  expect_that( TRUE, equals(FALSE))

我的描述是

Package: minimalbugexample
Title: 
Description: 
Version: 0.1.1
Author: Nathan VanHoudnos <nathanvan@letterafterFmail.com>
Maintainer: Nathan VanHoudnos <nathanvan@letterafterFmail.com>
Depends:
    R (>= 3.0.1),
    Matrix (>= 1.0)
Suggests:
    testthat
License: GPL
LazyData: true
Collate:
    'minimalbugexample-package.r'
    'use-Matrix-package.R'

安装完包之后,我可以顺利运行测试(它们会按照预期失败)。
> test_package('minimalbugexample')
Intentional break : 1


1. Failure:  -------------------------------------------------------------------
TRUE not equal to FALSE
1 element mismatch
Error: Test failures
> 

然而,R CMD check并不运行测试。

$ R CMD check minimalbugexample_0.1.1.tar.gz 
... snip ...
* checking PDF version of manual ... WARNING
WARNING: There was 1 warning.
See
  ‘/home/nathanvan/software/minimalbugexample.Rcheck/00check.log’
for details.

我认为PDF警告与此无关,但如有需要,我可以提供更多细节。

方法二:(最新)

根据testthat仓库的README文件

现在,推荐的做法是将你的测试放在tests/testthat中,并通过在tests/test-all.R中添加以下代码来确保运行R CMD check:

library(testthat)
test_check(yourpackage)

因此,我确保安装了最新版本的testthat:

> install_github("testthat")

然后修改了包。你可以在这里获取此版本。我修改了两个文件。

## minimalbugexample/inst/tests/test-all.R
library(testthat)
test_check(minimalbugexample)

并且

## minimalbugexample/inst/tests/testthat/test-use-Matrix-package.R
context("Intentional break")
  expect_that( TRUE, equals(FALSE))

将DESCRIPTION文件中的软件包版本更新为0.1.2后,我可以构建、安装并使用testthat检查它,并获得与之前相同的输出。因此,就testthat而言,它是有效的。

但是,R CMD check仍然无法运行测试:

$ R CMD check minimalbugexample_0.1.2.tar.gz 
... snip ...
* checking PDF version of manual ... WARNING
LaTeX errors when creating PDF version.
This typically indicates Rd problems.
WARNING: There was 1 warning.
See
  ‘/home/nathanvan/software/minimalbugexample.Rcheck/00check.log’
for details.

所以问题是:

我错在哪了?我更偏向于使用方法2的解决方案,但我会接受任何一种!


2
请注意,如果您使用的是第一种方法,您需要在 DESCRIPTION 中的 Suggests: 中添加 testthat。具体操作请参考此链接:https://dev59.com/1WEi5IYBdhLWcg3wWLAS - Ari B. Friedman
1个回答

14

你没有一个名为tests的目录。 test-all.R应该位于minimalbugexample/tests/test-all.R中。

然后,对于第一种方法,你的实际测试应放在minimalbugexample/inst/tests中;对于第二种方法,应放在minimalbugexample/tests/testthat/中。

对于第二种方法,test-all.R文件应使用test_check(yourpackage)而不是test_package(yourpackage),不再需要调用library(yourpackage)


我想问题在于我看不懂!谢谢!(适用于第二种方法!) - Nathan VanHoudnos
其实,对于第二种方法,test-all.R 文件应该像你说的那样位于 minimalbugexample/tests/test-all.R,但是真正的测试在 minimalbugexample/tests/testthat/ 中进行。我需要做更多的 bug 测试才能弄清楚这一点。如果你将此纳入你的答案中,我会重新接受它!GitHub 上的示例 - Nathan VanHoudnos
谢谢。编辑对我来说是一个新的特权,所以我不确定社区规范。 - Nathan VanHoudnos
2
另外,为了避免未指定依赖项的警告,您应该在您的DESCRIPTION文件中添加“Suggests:testthat”。 - Juancentro
运行测试是 R CMD check <pkg> 的最后一步操作,因此早期发生的任何错误都可能阻止它们运行。例如缺少 NAMESPACE 文件。 - Steve Pitchers
还要注意,test-all.R大写扩展名是必不可少的。否则 R CMD check 将无法运行测试。 - Michael Schubert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接