如何解决在闪亮的 testServer
我正在编写一个模块化的闪亮应用程序,我正在尝试为其中一个模块编写测试,其中从 URL 中的参数创建反应式。
为了测试反应是否返回正确的值,我想我需要在闪亮的 testServer
中创建一个模拟 URL 查询字符串,这正是我一直在尝试做的。
我希望可以使用 session$updateQueryString()
之类的东西在 session$setInputs()
内创建模拟 URL 查询字符串(类似于 testServer
)。查看 MockShinySession
使用的 testServer
对象的 source code 我认为这可能是可能的,因为 updateQueryString
方法被添加到 MockShinySession
实例。但是,我无法使用 MockShinySession
更新 ?mocksearch=1
对象(即 updateQueryString()
)的 URL 查询字符串(请参阅下面的 reprex)。
所以我的问题是,我尝试这样做的方式是否可行,如果可以,我做错了什么?否则,测试此类模块的替代方法是什么?
以下 reprex 显示了一个应用程序,其中包含两个访问 URL 参数的反应式。在 testServer
中,我尝试如上所述更新会话对象的 URL 参数,但尝试更新后的测试均失败。
非常感谢任何解决方案或想法!
提前致谢:)
library(shiny)
library(testthat)
ui <- fluidPage(
textInput("txt","enter some text"),verbatimtextoutput("querytext"),verbatimtextoutput("querytext_mock")
)
server <- function(input,output,session) {
query <- reactive({
query <- parseQueryString(session$clientData$url_search)
query <- query[["urlparam"]]
paste0(input$txt,query)
})
query_mock <- reactive({
query <- parseQueryString(session$clientData$url_search)
query <- query[["mocksearch"]]
paste0(input$txt,query)
})
output$querytext <- renderText({
query()
})
output$querytext_mock <- renderText({
query_mock()
})
}
app <- shinyApp(ui,server)
testServer(app,{
session$setInputs(txt = "Hi")
# These two pass:
expect_equal(query(),"Hi")
expect_equal(query_mock(),"Hi1")
session$updateQueryString("?urlparam=There",mode = "push")
# This fails (because query() is "Hi")
expect_equal(query(),"HiThere")
session$updateQueryString("?mocksearch=There",mode = "push")
# This also fails (because query_mock() is "Hi1")
expect_equal(query_mock(),"HiThere")
})
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。