如何使用testthat测试已安装的包?

7

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

library(testthat)
test_package("testthat")
# Error: No tests found for testthat

test_package (源代码在这里) 报错了,因为 system.file("tests", package = package) 是空的。实际上,已安装的包中缺少 tests 目录。
list.dirs(system.file("", package = "testthat"))
# [1] "/home/paul/R/x86_64-pc-linux-gnu-library/3.2/testthat/"     
# [2] "/home/paul/R/x86_64-pc-linux-gnu-library/3.2/testthat//help"
# [3] "/home/paul/R/x86_64-pc-linux-gnu-library/3.2/testthat//html"
# [4] "/home/paul/R/x86_64-pc-linux-gnu-library/3.2/testthat//libs"
# [5] "/home/paul/R/x86_64-pc-linux-gnu-library/3.2/testthat//Meta"
# [6] "/home/paul/R/x86_64-pc-linux-gnu-library/3.2/testthat//R"  

如何安装一个包,使其测试目录仍然存在?


1
https://dev59.com/dIzda4cB1Zd3GeqPtPOH 提供了一种将测试打包到软件包中的方法,而无需将其放置在inst目录下。 - lunguini
2个回答

7
如果作者选择不将测试放在inst/目录中,那么它们将不会随包一起安装,您也无法通过已安装的软件包运行测试。
因此,除非修改源软件包并重新安装,否则您无法做任何事情。但在那时,您可能会直接在源软件包上运行测试。

1
我看到在这个回答中提到了inst/tests。所以看起来如果我想要将测试与我的源代码包一起发布,我必须将它们放在inst/目录下。为什么Hadley在他的软件包测试章节中没有提到这一点呢? - Paul Rougieux
@PaulRougieux:我不知道为什么他没有提到它;你可以问他。 - Joshua Ulrich
我的初衷是与源代码包分享测试。我只是将“tests”移动到“inst/tests”,重新构建了包,现在“testthat::test_package()”可以工作了。 - Paul Rougieux
2
@stats0007的答案提到了一个在这个被接受的答案中缺失的重要选项: install.packages("testthat", INSTALL_opts = "--install-tests") - lunguini

4

您可以使用以下方式测试软件包:

tools::testInstalledPackage("package")

但我认为这仅在测试位于inst/目录下时才有效。

还有其他的...

install.packages("testthat", INSTALL_opts = "--install-tests")

安装包时,也要将测试文件一并安装。但仅当测试文件在inst/目录下时才有效。

所以最好下载源代码包并运行以下命令:

devtools::test()

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