使用check()测试失败

hej*_*seb 6 environment r devtools package testthat

我正在尝试在我的软件包中添加一些测试,以确保在进行更改时保持原样.我这样做有些困难.

我想测试我的包的主要功能,可以粗略地描述为插补方法.因此,如果我给第二列有一些的n x 2矩阵,它应该返回第一列中的第一列并且是相同的(因为它完全被观察到),第二列应该被估算,因此第二列中没有.YNAZYZNAZ

显然,该函数还有其他几个输入,但我测试的主要结构是

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])
})
Run Code Online (Sandbox Code Playgroud)

我的问题是这不起作用.它在我运行时有效devtools::test(),但在运行时无效devtools::check().我尝试使用expect_equal_to_reference()(因为我真正想要测试的是比这个例子更大,更强制),但它也会抛出错误,尽管在控制台中运行代码并与保存的.rds文件进行比较表明它们是相同的.

我发现哈德利的这句话(在测试中):

有时,当使用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) 
Run Code Online (Sandbox Code Playgroud)

hej*_*seb 3

答案既简单又令人尴尬。该包需要加载到测试文件中,因此它应该以以下内容开头:

library(mypackage)
context("Test output")
Run Code Online (Sandbox Code Playgroud)

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