使用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
相关产品推荐
相关产品推荐

