如何测试ggplot是否被打印?

问题描述

让我们考虑非常基本的功能

plot_ggplot <- function() { 
    print(ggplot() + aes(x = 1:100,y = 1:100) + geom_point())
}

是否有可能为这种定义的函数创建合理的单位?我知道当不包括打印时,我们可以轻松地创建单元测试。也许有可能检查 R 的绘图窗口中是否出现某些内容

我不想重新定义函数,因为它是更大函数的一部分。

解决方法

一种可能性是将设备捕获为光栅并检查所有值是否为白色,但我不知道设备在 testthat 环境中的行为。我认为,您还必须在每次打印后cap <- ragg::agg_capture() 并为每次测试重新启动 library(ggplot2) cap <- ragg::agg_capture() has_printed <- function(x = cap()) { !all(x == "white") } plot_ggplot <- function() { print(ggplot() + aes(x = 1:100,y = 1:100) + geom_point()) } has_printed() #> [1] FALSE plot_ggplot() has_printed() #> [1] TRUE dev.off() #> png #> 2 cap <- ragg::agg_capture() has_printed() #> [1] FALSE

has_printed()

reprex package (v0.3.0) 于 2021 年 1 月 29 日创建

编辑:您可能可以将重置作为 library(ggplot2) cap <- ragg::agg_capture() has_printed <- function(x = cap()) { out <- !all(x == "white") dev.off() cap <<- ragg::agg_capture() return(out) } plot_ggplot <- function() { print(ggplot() + aes(x = 1:100,y = 1:100) + geom_point()) } has_printed() #> [1] FALSE plot_ggplot() has_printed() #> [1] TRUE has_printed() #> [1] FALSE 函数的一部分自动进行,但您必须小心超级赋值(这里是龙)。

pragma solidity ^0.4.0;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/math/SafeMath.sol";

reprex package (v0.3.0) 于 2021 年 1 月 29 日创建

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...