微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在闪亮的 testServer

如何解决在闪亮的 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 举报,一经查实,本站将立刻删除。