【问题标题】:devtools::test object not found未找到 devtools::test 对象
【发布时间】:2026-01-24 18:25:02
【问题描述】:

我有一系列针对大型对象的单元测试(下面的 MWE 中的y)。我在testthat.R 中构造了y,如果我运行R CMD check,则测试通过,但如果我运行devtools::test(),则测试通过。

如何确保devtools::test() 在正确的环境中运行测试?或者使对象可用于所有测试的规范方法是什么?

https://github.com/HughParsonage/testGlobalEnv

./tests/testthat.R

library(testthat)
library(testGlobalEnv)

y <- 1:5

test_check("testGlobalEnv")

./R/adder.R

#' Adds numbers
#' @param x A vector of numbers
#' @export

adder <- function(x){
  sum(x)
}

./tests/test_adder.R

test_that("adder", {
  expect_equal(adder(y), 15)
})

R CMD check 显示测试通过;但是,运行 devtools::test():

1
Failed -------------------------------------------------------------------------------------------------------------------
1. Error: adder (@test_adder.R#2) ----------------------------------------------------------------------------------------
object 'y' not found
1: expect_equal(adder(y), 15) at C:\Users\Hugh Parsonage\Documents\Github\testGlobalEnv/tests/testthat/test_adder.R:2
2: compare(object, expected, ...)
3: adder(y)

【问题讨论】:

  • 这是正在测试的包的名称。
  • install_github('HughParsonage/testGlobalEnv')
  • y &lt;- 1:5 是否需要存在于test_adder.R 内部(甚至存在于test_that("adder", {}) 内部?
  • 这可以防止错误,但我想避免将它添加到每个测试中(因为它不是 CMD 检查所必需的)。

标签: r unit-testing devtools


【解决方案1】:

对于“使对象可用于所有测试的规范方法是什么”的问题:只需将您的共享数据、计算……放在/test/testthat/helper-mytitle.R 中,它将可用于所有测试。

【讨论】: