Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R testthat包:使用test_file()时,如何查看message()的输出_R_Testthat - Fatal编程技术网

R testthat包:使用test_file()时,如何查看message()的输出

R testthat包:使用test_file()时,如何查看message()的输出,r,testthat,R,Testthat,我在R中使用了优秀的testthat包。我的问题是,在使用test_文件时,在被测试的代码中看不到message()函数的任何输出。例如,假设我在一个名为test_message.R的文件中有以下代码 f <- function() { message ("Message: Hello world") cat ("Cat: Hello world\n") return (1) } test_that ("message shows up", { expe

我在R中使用了优秀的testthat包。我的问题是,在使用test_文件时,在被测试的代码中看不到message()函数的任何输出。例如,假设我在一个名为test_message.R的文件中有以下代码

f <- function() {
    message ("Message: Hello world")
    cat ("Cat: Hello world\n")
    return (1)
}

test_that ("message shows up", {
     expect_equal(f(), 1)
 })
因此,我没有看到message()中的文本

但是,当我自己运行代码时,我确实看到了它:

> f()
Message: Hello world
Cat: Hello world
[1] 1

我知道默认情况下,message()会写入stderr,cat会写入stdout,我猜test_文件会“截取”stderr以测试警告和错误中的文本。是否有任何方法可以配置内容,以便在控制台上看到message()文本

您不能这样做,至少必须修改
testthat
的源代码。这是运行测试代码的部分:如果从
test\u code
功能中删除
suppressMessages
,则将显示消息


顺便说一句,
test,
不会捕获标准输出或错误,因此如果您使用
cat
或其他方式对其进行写入,也会显示出来。

这是我在so上的第一篇文章,关于我两周前刚开始学习的一种语言,请温柔些

我相信以下是你想要的:

test_that ("message shows up", {
  expect_message(f(), "^Message: Hello world\\n")
})
此外,请参见第23页的
显示消息
预期消息
(供将来参考:v0.8.1发布于2014-02-22 00:25:04)

完全归功于GSee,这是继这篇文章之后的第二篇文章,我在寻找测试这篇文章时发现了这篇文章

我刚刚发现了
evaluate\u promise
(也在上面链接的pdf中)。因此,这里有一个替代方案,它将测试消息并打印输出:

test_that ("message shows up", {
  result <- evaluate_promise(f(), print = TRUE)
  expect_that(result$message, equals("Message: Hello world\n"))
  print(result$output)
})
测试(“消息显示”{

结果我可以问一下为什么在运行测试时要查看消息的输出吗?我把消息()首先调用代码以记录代码的进度。我希望在运行测试时查看这些消息,以了解代码失败之前的进展情况,并查看消息本身是否正常工作。看起来我需要使用另一种机制来完成此操作。谢谢。这非常适合测试我正在查找的消息。问题是,我想看到消息在运行时打印出来,而不仅仅是测试它们是否存在。我可以不使用此功能,或者使用您的建议测试消息,或者只是在非测试环境中观察消息。@user2793761添加了一个使用
evaluate\u promise
的替代选项,该选项可以我不能满足。
test_that ("message shows up", {
  result <- evaluate_promise(f(), print = TRUE)
  expect_that(result$message, equals("Message: Hello world\n"))
  print(result$output)
})