我希望能够看到代码中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
如何在测试运行中添加一些跟踪输出?
答案 0 :(得分:1)
您可以在反应函数中放置一个print(),cat(),warning()来检查R提示符下对象的值o类。这对我来说仅在RStudio中使用Shinny而不使用Shinytest。
另外,正如您所说的,它不能使用先前的选项,您可以放置一个write.myformat()
函数以编写任何类型的对象并在外部进行检查。
答案 1 :(得分:1)
我认为目前还没有一种真正方便的方法可以在Shinytest中查看应用程序的输出,但是ShinyDriver对象上有此方法:
app$getDebugLog()
查询一个或多个调试日志:shiny_console
,browser
或shinytest
。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/。