问题描述
我正在编写一个模块化的闪亮应用程序,我正在尝试为其中一个模块编写测试,其中从 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 (将#修改为@)