我正在尝试将一些测试添加到我的软件包中,以确保在我进行更改时会保持原样。我在这样做时遇到了一些困难。
我想测试包装的主要功能,可以将其大致描述为插补方法。因此,如果我将n x 2
矩阵Y
给它,其中第二列具有一些NA
,则应返回Z
,其中Y
和Z
中的第一列是相同的(因为它是完全观察到的),并且应归纳第二列Z
的第二列中没有NA
。
显然,该功能还有其他几个输入,但是我的测试的主要结构是
context("Test output")
test_that("First column equal", {
set.seed(100)
Y <- matrix(rnorm(200), 100, 2)
Y[seq(1, 100, by = 3), 2] <- NA
out <- my_fun(Y)
expect_equal(Y[, 1], out[, 1])
})
我的问题是这不起作用。当我运行devtools::test()
时,它起作用,但在运行devtools::check()
时不行。我尝试使用expect_equal_to_reference()
(因为我真正想测试的内容比此示例更大,更令人震惊),但是尽管在控制台中运行代码并与已保存的.rds
文件进行比较,但它也会引发错误。/p>
我发现了哈德利(在测试中)的这句话:
偶尔您可能会遇到问题,而运行时测试通过 与DevTools :: test()进行交互式,但在R CMD检查中失败。 这通常表明您对 测试环境,通常很难弄清楚。
它不是很好,但是我该怎么办?有任何想法吗?
这是我遇到的错误(test_file
是包含上述代码的文件的名称):
checking tests ...
** running tests for arch 'i386' ... ERROR
Running the tests in 'tests/testthat.R' failed.
Last 13 lines of output:
3: asNamespace(ns)
4: getNamespace(ns)
5: tryCatch(loadNamespace(name), error = function(e) stop(e))
6: tryCatchList(expr, classes, parentenv, handlers)
7: tryCatchOne(expr, names, parentenv, handlers[[1L]])
8: value[[3L]](cond)
... 13 lines ...
5: tryCatch(loadNamespace(name), error = function(e) stop(e))
6: tryCatchList(expr, classes, parentenv, handlers)
7: tryCatchOne(expr, names, parentenv, handlers[[1L]])
8: value[[3L]](cond)
testthat results ================================================================
OK: 0 SKIPPED: 0 FAILED: 1
1. Error: First column equal (@test_file.R#12)
答案很简单。该软件包需要在测试文件中加载,以便以下内容:
library(mypackage)
context("Test output")
我认为它以前起作用,但实际上却没有。现在,包装已正确加载,我可以看到例如my_fun
打印的进度条出现在构建窗格中。