我正在尝试在我的软件包中添加一些测试,以确保在进行更改时保持原样。我在这方面遇到了一些困难。
我想测试我的包的主要功能,可以粗略地描述为插补方法。因此,如果我向n x 2
矩阵Y
提供第二列有NA
的位置,则应该返回Z
Y
中Z
和NA
中的第一列{1}}是相同的(因为它已被完全观察到),第二列应该被估算,以便Z
的第二列中没有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
(因为我真正想测试的是比这个例子更大,更强制),但它也会抛出错误,尽管在控制台中运行代码并与保存的test_file
进行比较文件显示它们是相同的。
我发现哈德利(under tests)引用了这句话:
有时,运行时测试通过时可能会出现问题 与devtools :: test()交互式,但在R CMD检查时失败。 这通常表明你做了一个错误的假设 测试环境,通常很难搞清楚。
这不是好兆头,但我该怎么办?有任何想法吗?
以下是我得到的错误(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)
是包含上述代码的文件的名称):
{{1}}
答案 0 :(得分:4)
答案是尴尬,因为它很简单。该包需要加载到测试文件中,因此它应该以:
开头library(mypackage)
context("Test output")
虽然我认为它之前有效但实际上并没有。现在包装已正确加载,我可以看到,例如my_fun
打印的进度条显示在“构建”窗格中。