如何让testthat::expect_equal()输出更具实用性的结果?
解决testthat提示长度差异但不显示缺失项的问题
你可以通过两种方式让testthat输出更具体的缺失信息:
方法1:分步检查命名与值
先单独验证向量的命名完整性,再检查对应的值是否匹配,能直接明确显示缺失的命名项:
library(testthat) test_that( 'files are named correctly', { expected <- c(AMEREN1 = "AMEREN24.01.15_March-1_DM_RL.pdf", COMED1 = "COMED24.01.15_March-1_DM_RL.pdf", `MD-OTH1` = "MD-OTH24.01.15_March_DM_RL.pdf", MD1 = "MD24.01.15_March_DM_RL.pdf", NJ1 = "NJ24.01.15_March_DM_RL.pdf", OH1 = "OH24.01.15_March_DM_RL.pdf", PA1 = "PA24.01.15_March_DM_RL.pdf", AMEREN2 = "AMEREN24.01.15_March-2_DM_RL.pdf", COMED2 = "COMED24.01.15_March-2_DM_RL.pdf", `PA-DUQ2` = "PA24.01.15_March-DUQ_DM_RL.pdf", `PA-METED2` = "PA24.01.15_March-METED_DM_RL.pdf", `PA-PECO2` = "PA24.01.15_March-PECO_DM_RL.pdf", `PA-PENELEC2` = "PA24.01.15_March-PENELEC_DM_RL.pdf", `PA-PENN2` = "PA24.01.15_March-PENN_DM_RL.pdf", `PA-PPL2` = "PA24.01.15_March-PPL_DM_RL.pdf", `PA-WPP2` = "PA24.01.15_March-WPP_DM_RL.pdf" ) actual <- c(AMEREN1 = "AMEREN24.01.15_March-1_DM_RL.pdf", COMED1 = "COMED24.01.15_March-1_DM_RL.pdf", `MD-OTH1` = "MD-OTH24.01.15_March_DM_RL.pdf", MD1 = "MD24.01.15_March_DM_RL.pdf", NJ1 = "NJ24.01.15_March_DM_RL.pdf", PA1 = "PA24.01.15_March_DM_RL.pdf", AMEREN2 = "AMEREN24.01.15_March-2_DM_RL.pdf", COMED2 = "COMED24.01.15_March-2_DM_RL.pdf", `PA-DUQ2` = "PA24.01.15_March-DUQ_DM_RL.pdf", `PA-METED2` = "PA24.01.15_March-METED_DM_RL.pdf", `PA-PECO2` = "PA24.01.15_March-PECO_DM_RL.pdf", `PA-PENELEC2` = "PA24.01.15_March-PENELEC_DM_RL.pdf", `PA-PENN2` = "PA24.01.15_March-PENN_DM_RL.pdf", `PA-WPP2` = "PA24.01.15_March-WPP_DM_RL.pdf" ) # 先检查命名是否完全匹配 expect_equal(names(actual), names(expected), info = sprintf("缺失的命名项: %s", paste(setdiff(names(expected), names(actual)), collapse = ", "))) # 再检查值是否匹配 expect_equal(actual, expected) } )
运行后会直接提示缺失的命名:
-- Failure (':27'): files are named correctly ----------------------------
names(actual)not equal tonames(expected).
Lengths differ: 14 is not 16
Missing names in actual: "OH1", "PA-PPL2"
info: 缺失的命名项: OH1, PA-PPL2
方法2:使用waldo包增强对比
waldo包的对比功能比默认expect_equal更详细,能直接输出向量的差异细节:
library(testthat) library(waldo) test_that( 'files are named correctly', { # expected和actual定义同之前代码 expect_equal(actual, expected, compare = waldo::compare) } )
运行后会输出包含缺失项的详细差异报告,比如:
actualnot equal toexpected.- actual+ expected
[5] "NJ24.01.15_March_DM_RL.pdf"
[6] "PA24.01.15_March_DM_RL.pdf"
- [7] "OH24.01.15_March_DM_RL.pdf"
[7] "AMEREN24.01.15_March-2_DM_RL.pdf"
...
- Names: 14 total
- Names: 16 total
- Missing names: "OH1", "PA-PPL2"
内容的提问来源于stack exchange,提问作者joshbrows
相关产品推荐
相关产品推荐

