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。
解决办法
有两种可行的修复方式:
- 在测试用例开头显式开启
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") })
- 调用
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
相关产品推荐
相关产品推荐

