R testthat测试S3类API返回对象出现produced no output报错的原因
报错原因
- 核心问题是你误用了
testthat的断言函数:expect_output()的校验对象是代码运行时打印到控制台的文本输出,而非代码返回的对象本身的值。 - testthat的测试执行环境默认不会自动打印代码的返回结果,因此
head(test_object$data)执行后没有输出到控制台的内容,触发了“无输出”的报错。
修复方案
你需要用校验对象值相等的expect_equal()替代expect_output(),修改后的测试代码如下:
test_that("Output is correct", { correct_df <- data.frame("index" = c(1:6), "time" = c("2010-06-13T16:42Z", "2010-07-30T16:08Z", "2010-08-01T08:10Z", "2010-08-01T10:20Z", "2010-08-01T11:20Z", "2010-08-01T17:00Z"), "speed" = c(500, 750, 760, 1800, 1300, 550), "type" = c("C", "C", "C", "O", "O", "C"), stringsAsFactors = FALSE) # 建议添加该参数避免因子类型不匹配 expect_equal(head(test_object$data), correct_df) })
如果测试时因为行名、数据类型等非核心属性不一致报错,可以给expect_equal()添加ignore_attr = TRUE参数跳过非核心属性校验:
expect_equal(head(test_object$data), correct_df, ignore_attr = TRUE)
内容的提问来源于stack exchange,提问作者OLGJ
相关产品推荐
相关产品推荐

