R test_that ggplot 没有改变

R test_that a ggplot didn't change

我有一个自定义绘图函数,我想确保它即使在向绘图函数添加其他选项后也能输出相同的绘图。

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

在测试函数工厂的输出时会出现类似的问题,因为闭包也带有它们的环境。

有没有人遇到过这个问题,你是怎么解决的?

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

如果这是测试用例的一部分,您可以使用扩展 '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() 可能会有所帮助,但我想并非在所有情况下都如此。