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

使用devtools::test()执行基础绘图测试时遇无可用录制设备错误的解决

R包测试中recordPlot()报错的原因与解决办法

错误原因

devtools::test()的运行环境默认是无交互的非图形环境,不会自动启动绘图窗口。recordPlot()必须依赖一个活跃的绘图设备才能捕获已绘制的图形,此时没有可用的设备,因此触发"no current device to record from"错误。

解决方法

1. 手动启动临时无输出设备

在绘图前启动一个临时的虚拟设备(不会生成实际文件),完成操作后关闭设备即可:

test_that("test works", {
  # 启动临时PDF设备,无实际输出
  pdf(NULL)
  base_r_plot <- recordPlot(plot(1))
  # 关闭设备
  dev.off()
  expect_equal(class(base_r_plot), "recordedplot")
})

也可以用png(filename = NULL)替代pdf(NULL),效果一致。

2. 用专业可视化测试工具(推荐)

如果是做可视化相关测试,更推荐使用vdiffr包,它会自动处理绘图设备的问题,还能帮你对比图形的一致性:

test_that("test works", {
  # 验证图形输出
  vdiffr::expect_doppelganger("base-r-plot", {
    plot(1)
  })
  
  # 若仍需检查recordPlot的结果类
  pdf(NULL)
  p <- recordPlot(plot(1))
  dev.off()
  expect_equal(class(p), "recordedplot")
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 23:43:11