如何使用Shinytest记录或跟踪?

时间:2018-10-19 22:10:06

标签: r shiny rstudio

我希望能够看到代码中reactive({...})部分内部发生的情况。我认为使用Shinytest可能是一种执行应用程序中使用Shiny Modules并了解callModule的部分的方法。

我在代码中尝试了以下操作来进行日志/跟踪/打印。

print("hello1")
message("hello2")
cat(file=stderr(), "hello3")
logging::loginfo("hello4")

runtest.R

library(shinytest)
testApp("/home/eddy/rwork/filters", "mytest")
viewTestDiff("/home/eddy/rwork/filters", interactive = FALSE)

输出:

Rscript runtest.R
Running mytest.R 
==== Comparing mytest... No changes.
==== mytest ====
No differences between expected and current results

如何在测试运行中添加一些跟踪输出?

3 个答案:

答案 0 :(得分:1)

您可以在反应函数中放置一个print(),cat(),warning()来检查R提示符下对象的值o类。这对我来说仅在RStudio中使用Shinny而不使用Shinytest。 另外,正如您所说的,它不能使用先前的选项,您可以放置​​一个write.myformat()函数以编写任何类型的对象并在外部进行检查。

答案 1 :(得分:1)

我认为目前还没有一种真正方便的方法可以在Shinytest中查看应用程序的输出,但是ShinyDriver对象上有此方法:

  

app$getDebugLog()查询一个或多个调试日志:shiny_consolebrowsershinytest

     

https://rstudio.github.io/shinytest/reference/ShinyDriver.html

您可以将其与shiny_console选项结合使用,以在单个测试中打印应用输出,例如:

# mytest.R

app <- ShinyDriver$new()

...

log <- app$getDebugLog("shiny_console")
print(log)

答案 2 :(得分:1)

shinytest 在测试过程中与导出值的 shiny 概念集成在一起,因此您可以使用函数shiny::exportTestValues()使用值创建命名表达式,包括要导出的反应式。

例如,如果您的反应性data.frame scaledData在您的应用程序代码中使用了某种输入绑定,则可以执行以下操作:

scaledData <- reactive({
  dummyData[, "y"] <- dummyData[, "y"] * input$scale
  return(dummyData)
})

# The scaledData will be captured as a json object in the shinytest output
exportTestValues(scaledData = scaledData())

这将在json文件中的exports键下捕获快照中的无功值,因此您可以在测试比较中使用它(并根据需要查看数据)。 / p>

最后一点要注意的是,这些导出值仅在应用程序处于测试模式时才能运行,例如isTRUE(getOption("shiny.testmode"))

我写了一篇关于如何使用它来测试DataTables的博客文章,您可以在这里阅读:https://nadirsidi.github.io/Shinytest/