You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

getParseData在testthat测试中返回NULL的问题求助

问题原因及解决办法

核心原因

testthat的测试环境默认会设置options(keep.source = FALSE),而getParseData()依赖解析时保留的源信息才能生成结构化的解析数据。当keep.source为FALSE时,parse()不会存储这些关键信息,直接导致getParseData()返回NULL。

  • 普通R会话默认keep.source = TRUE,所以代码能正常运行;
  • 直接运行测试代码时,会继承当前会话的keep.source设置,因此能通过;
  • RStudio点击“Run Tests”会启动全新的独立测试环境,testthat会自动启用默认的keep.source = FALSE配置,所以调用getParseData()会返回NULL。

解决办法

有两种可行的修复方式:

  1. 在测试用例开头显式开启keep.source选项,测试结束后恢复原设置:
testthat::test_that("提取SYMBOL正常", {
  old_option <- getOption("keep.source")
  on.exit(options(keep.source = old_option))
  options(keep.source = TRUE)
  
  # 你的测试逻辑
  parsed <- parse(text = "mpg > 10")
  expect_s3_class(getParseData(parsed), "data.frame")
})
  1. 调用parse()时直接指定keep.source = TRUE参数:
testthat::test_that("提取SYMBOL正常", {
  parsed <- parse(text = "mpg > 10", keep.source = TRUE)
  expect_s3_class(getParseData(parsed), "data.frame")
})

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 07:04:54