R test_ggplot不变

时间:2018-08-06 13:52:26

标签: r ggplot2 environment testthat

我有一个自定义绘图功能,即使在plot-function中添加了其他选项之后,我也想确保它能发布相同的绘图。

不幸的是,testthat::expect_known_hash方法失败了,因为ggplots存储了有关某些环境的信息,显然,这些信息在重新启动R时会改变。

测试功能工厂的输出时也会出现类似的问题,因为闭包还带有其环境。

有人遇到过这个问题吗,您是如何解决的?

2 个答案:

答案 0 :(得分:2)

compare允许您比较不同的R对象。该程序包具有不同的功能来检测对象之间的差异。

compare(plot(0), plot(0))
TRUE



scatter <- ggplot(data=iris, aes(x = Sepal.Length, y = Sepal.Width)) + geom_point(aes(color=Species, shape=Species))
scatter2 <- ggplot(data=iris, aes(x = Sepal.Length, y = Petal.Width)) + geom_point(aes(color=Species, shape=Species))

compare(scatter, scatter2)

FALSE [TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE, FALSE]
model treated as list
[layers] [1] model treated as character
[scales] model treated as character
[mapping] model treated as list
[mapping] [y] model treated as character
[coordinates] model treated as character
[facet] model treated as character

答案 1 :(得分:1)

如果这是测试用例的一部分,则可以使用扩展了“ testthat”的软件包“ vdiffr”。它用于测试用例的最新版本“ ggplot2”,因此您可以在Github中查看示例。它还在RStudio中安装了一个插件,以管理保存的测试用例并对失败的测试进行可视化比较。它运行良好,我在自己的程序包中使用它。它使用简化的svg设备将参考图保存到磁盘。

一个测试用例可能看起来像这样(其余的都类似于“ testthat”用例):

  vdiffr::expect_doppelganger("test_001",
                              ggplot(data = cars, aes(speed, dist)) +
                                geom_point()
  )

在某些情况下,除了来自软件包“ testthat”的图expect_known_output()expect_known_value()可能会有所帮助,但我想并非在每种情况下都如此。