抑制 test_that 输出“测试通过 :)”

问题描述

R 中 test_that 包(版本 3.0.2)的更新导致通过测试的输出为:

测试通过:)

这最初很可爱,但在每次迭代执行数千次测试的模型中很烦人。

如何抑制此消息?

解决方法

一种选择是将消息提取为字符串并将其转移到一个对象。我们可以使用 capture.output

out <- capture.output(test_that("trigonometric functions match identities",{
 expect_equal(sin(pi / 4),1 / sqrt(2))
expect_equal(cos(pi / 4),1 / sqrt(2))
expect_equal(tan(pi / 4),1)
}))

但是抑制消息的函数仍然会打印消息

enter image description here


我们可以在捕获后用grep设置一个条件来打印或不打印

f1 <- function(x) if(any(!grepl('passed',x))) cat(x,sep='\n')

out1 <- capture.output(test_that("trigonometric functions match identities",{

  expect_equal(sin(pi / 4),1 / sqrt(2))
  expect_equal(cos(pi / 4),1 / sqrt(2))
  expect_equal(tan(pi / 4),1)
  expect_equal(sin(pi / 4),1)

   }))

f1(out) # nothing prints
f1(out1)
#── Failure (???): trigonometric functions match identities ─────────────────────
#sin(pi/4) not equal to 1.
#1/1 mismatches
#[1] 0.707 - 1 == -0.293

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...