使用check()测试失败

时间:2017-03-14 08:23:08

标签: r package environment devtools testthat

我正在尝试在我的软件包中添加一些测试,以确保在进行更改时保持原样。我在这方面遇到了一些困难。

我想测试我的包的主要功能,可以粗略地描述为插补方法。因此,如果我向n x 2矩阵Y提供第二列有NA的位置,则应该返回Z YZNA中的第一列{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}}

1 个答案:

答案 0 :(得分:4)

答案是尴尬,因为它很简单。该包需要加载到测试文件中,因此它应该以:

开头
library(mypackage)
context("Test output")

虽然我认为它之前有效但实际上并没有。现在包装已正确加载,我可以看到,例如my_fun打印的进度条显示在“构建”窗格中。