R包testthat中expect_equal的ignore_attr失效,如何忽略属性测试?
testthat忽略属性测试的稳定方案
你遇到的expect_equal(ignore_attr = TRUE)失效问题,不需要修改测试让属性匹配,以下是两种当前稳定推荐的解决方法:
方法1:精确忽略指定属性
如果只需要跳过dimnames校验,保留其他属性(比如dim)的检查,直接在expect_equal中用ignore参数指定要忽略的属性名:
library(testthat) x <- structure(c("2", "0", "1", "2"), dim = c(2L, 2L), dimnames = list( c("1", "5"), c("m1", "m4"))) y <- structure(c("2", "0", "1", "2"), dim = c(2L, 2L)) expect_equal(x, y, ignore = "dimnames")
方法2:完全忽略所有属性
如果不需要校验任何属性,只比较原始数据内容,可以用unclass()移除对象的所有属性后再比较:
expect_equal(unclass(x), unclass(y))
关于原方法失效的说明
ignore_attr = TRUE是waldo::compare的参数,理论上expect_equal会传递该参数,但部分testthat版本存在参数传递兼容问题,导致该参数未生效。上述两种方法避开了这个问题,更稳定可靠。
内容的提问来源于stack exchange,提问作者nya
相关产品推荐
相关产品推荐

