-
Notifications
You must be signed in to change notification settings - Fork 341
Closed
Description
When testing code happening with test_that() inside a shiny app using shiny::testServer() and an error happens inside shiny::observeEvent({...}) the error location is not reported in the stack trace generated by test_that(). It is only reported by the default handler output that is generated by shiny. In the reproducible example, the stack trace stops at setInputs() rather than following the functions that are called as a results of setInputs() being called.
The expected result would be that testthat and shiny report the same error source, the function "stop()" in the function x(), and give as file and line number test.R:6.
Example application or steps to reproduce the problem
# File "test.R"
library(testthat)
library(shiny)
x <- function(a){
stop("test")
}
testServer(list(
ui = flowLayout(actionButton("button", "Push me")),
server = function(input, output, session){
observeEvent(input$button, {
rlang::try_fetch(
x(3)
, error = function(e) rlang::abort("Error in observer", parent = e)
)
})
}), {
test_that("x",{
session$setInputs(button = 1L)
})
})Output:
# [ Full `shiny` stack trace =============================================== ]
131: <Anonymous>
130: signalCondition
129: signal_abort [/tmp/RtmpXwi0DI/R.INSTALL279488583bf75f/rlang/R/cnd-abort.R#861]
128: rlang::abort [/tmp/RtmpXwi0DI/R.INSTALL279488583bf75f/rlang/R/cnd-abort.R#390]
127: handlers[[1L]] [~/test.R#14]
126: h [/tmp/RtmpXwi0DI/R.INSTALL279488583bf75f/rlang/R/cnd-handlers.R#223]
125: .handleSimpleError
124: stop
123: x [~/test.R#5]
116: observe [~/test.R#12]
115: <observer:observeEvent(input$button)> [/tmp/Rtmp2wImAI/R.INSTALLe8961d20769/rstudio-shiny-9a35b01/R/utils.R#1459]
113: valueFunc [/tmp/Rtmp2wImAI/R.INSTALLe8961d20769/rstudio-shiny-9a35b01/R/utils.R#1449]
96: func [/tmp/Rtmp2wImAI/R.INSTALLe8961d20769/rstudio-shiny-9a35b01/R/bind-event.R#298]
94: f [/tmp/Rtmp2wImAI/R.INSTALLe8961d20769/rstudio-shiny-9a35b01/R/utils.R#1532]
93: Reduce
84: do [/tmp/Rtmp2wImAI/R.INSTALLe8961d20769/rstudio-shiny-9a35b01/R/utils.R#1518]
83: hybrid_chain [/tmp/Rtmp2wImAI/R.INSTALLe8961d20769/rstudio-shiny-9a35b01/R/utils.R#1558]
82: observeEvent(input$button) [/tmp/Rtmp2wImAI/R.INSTALLe8961d20769/rstudio-shiny-9a35b01/R/bind-event.R#280]
81: contextFunc [/tmp/Rtmp2wImAI/R.INSTALLe8961d20769/rstudio-shiny-9a35b01/R/utils.R#1451]
80: env$runWith [/tmp/Rtmp2wImAI/R.INSTALLe8961d20769/rstudio-shiny-9a35b01/R/react.R#160]
69: ctx$run [/tmp/Rtmp2wImAI/R.INSTALLe8961d20769/rstudio-shiny-9a35b01/R/react.R#54]
68: run [/tmp/Rtmp2wImAI/R.INSTALLe8961d20769/rstudio-shiny-9a35b01/R/reactives.R#1234]
49: flushCallback [/tmp/Rtmp2wImAI/R.INSTALLe8961d20769/rstudio-shiny-9a35b01/R/reactives.R#1204]
48: FUN [/tmp/Rtmp2wImAI/R.INSTALLe8961d20769/rstudio-shiny-9a35b01/R/react.R#114]
47: lapply
46: ctx$executeFlushCallbacks [/tmp/Rtmp2wImAI/R.INSTALLe8961d20769/rstudio-shiny-9a35b01/R/react.R#113]
45: .getReactiveEnvironment()$flush [/tmp/Rtmp2wImAI/R.INSTALLe8961d20769/rstudio-shiny-9a35b01/R/react.R#182]
44: shiny:::flushReact [/tmp/Rtmp2wImAI/R.INSTALLe8961d20769/rstudio-shiny-9a35b01/R/react.R#202]
43: private$flush [/tmp/Rtmp2wImAI/R.INSTALLe8961d20769/rstudio-shiny-9a35b01/R/mock-session.R#692]
42: session$setInputs [/tmp/Rtmp2wImAI/R.INSTALLe8961d20769/rstudio-shiny-9a35b01/R/mock-session.R#370]
41: eval [~/test.R#20]
40: eval
31: test_code [/tmp/RtmpXdwe80/R.INSTALLf9c3cb9ccd7/r-lib-testthat-dbe8883/R/test-that.R#188]
30: test_that [/tmp/RtmpXdwe80/R.INSTALLf9c3cb9ccd7/r-lib-testthat-dbe8883/R/test-that.R#53]
29: rlang::eval_tidy [~/test.R#19]
5: testServer [/tmp/Rtmp2wImAI/R.INSTALLe8961d20769/rstudio-shiny-9a35b01/R/test-server.R#121]
4: eval [~/test.R#8]
3: eval
1: source
── Warning: x ─────────────────────────
Error in observe: Error in observer
Caused by error in `x()`:
! test
# [ Incomplete "test_that" stack trace ================================= ]
Backtrace:
▆
1. └─session$setInputs(button = 1L) at ~/test.R:20:5
2. └─private$flush() at rstudio-shiny-9a35b01/R/mock-session.R:370:7
3. └─shiny:::flushReact() at rstudio-shiny-9a35b01/R/mock-session.R:692:7
4. └─.getReactiveEnvironment()$flush() at rstudio-shiny-9a35b01/R/react.R:202:3
5. └─ctx$executeFlushCallbacks() at rstudio-shiny-9a35b01/R/react.R:182:9
6. └─base::lapply(...) at rstudio-shiny-9a35b01/R/react.R:113:7
7. └─shiny (local) FUN(X[[i]], ...)
8. └─shiny (local) flushCallback() at rstudio-shiny-9a35b01/R/react.R:114:9
9. └─shiny:::hybrid_chain(...) at rstudio-shiny-9a35b01/R/reactives.R:1204:9
10. └─shiny (local) do() at rstudio-shiny-9a35b01/R/utils.R:1558:5
11. └─base::tryCatch(...) at rstudio-shiny-9a35b01/R/utils.R:1518:5
12. └─base (local) tryCatchList(expr, classes, parentenv, handlers)
13. └─base (local) tryCatchOne(expr, names, parentenv, handlers[[1L]])
14. └─value[[3L]](cond)
15. └─shiny (local) catch(e) at rstudio-shiny-9a35b01/R/utils.R:1546:9
16. └─shiny::printError(e) at rstudio-shiny-9a35b01/R/reactives.R:1220:13
── Skip: x ────────────────────────────
Reason: empty test
System details
Browser Version: n/a
Output of sessionInfo():
R version 4.2.2 Patched (2022-11-10 r83330)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Debian GNU/Linux 12 (bookworm)
Matrix products: default
BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.11.0
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.11.0
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices datasets utils methods base
other attached packages:
[1] testthat_3.2.1.1 shiny_1.9.1.9000
loaded via a namespace (and not attached):
[1] Rcpp_1.0.13 rstudioapi_0.16.0 magrittr_2.0.3 pkgload_1.4.0 xtable_1.8-4 R6_2.5.1 rlang_1.1.4
[8] fastmap_1.2.0 tools_4.2.2 waldo_0.6.1 cli_3.6.3 withr_3.0.1 htmltools_0.5.8.1 digest_0.6.37
[15] rprojroot_2.0.4 lifecycle_1.0.4 crayon_1.5.3 brio_1.1.5 later_1.3.2 promises_1.3.2 cachem_1.1.0
[22] mime_0.12 compiler_4.2.2 desc_1.4.3 httpuv_1.6.15 renv_1.0.7
Metadata
Metadata
Assignees
Labels
No labels