#r #shiny #automated-tests #shinytest
Вопрос:
Это мой очень простой блестящий app.R
. Как вы видите, под двумя верхними пунктами меню есть пункты подменю с одинаковыми именами:
library(shiny)
ui <- basicPage(
navbarPage("App", id = "nav",
navbarMenu("Top 1", # id = "top1",
tabPanel("Sub 1", "Top 1, Sub 1"),
tabPanel("Sub 2", "Top 1, Sub 2")
),
navbarMenu("Top 2", # id = "top2",
tabPanel("Sub 1", "Top 2, Sub 1"),
tabPanel("Sub 2", "Top 2, Sub 2")
)
)
)
server <- function(input, output, session) {}
shinyApp(ui = ui, server = server)
Я могу запустить это приложение и получить доступ ко всем записям подменю просто отлично, используя shiny::shinyAppDir(".")
.
Однако при записи тестов, проходящих через все вкладки с помощью shinytest::recordTest(".")
, записанный сценарий выглядит примерно так:
app <- ShinyDriver$new("../../")
app$snapshotInit("mytest")
app$setInputs(nav = "Sub 2")
app$setInputs(nav = "Sub 1")
app$setInputs(nav = "Sub 2")
app$snapshot()
Вы сразу видите проблему: из звонков неясно, какой из пунктов верхнего меню я выбрал (для записи я выбрал Top 1, Top 2, Top 2).
Как я могу справиться с этим, не переименовав пункты подменю? Я попытался добавить an id
к navbarMenu
s, как вы можете видеть выше, но это привело только к
Все вкладки должны быть аргументами без имени, но некоторые имеют имена: id
Ответ №1:
Покопавшись немного, я нашел это:
значение Значение, которое следует отправлять при
tabsetPanel
сообщениях о том, что выбрана эта вкладка. Если опущено иtabsetPanel
имеетid
значение «а», то будет использоваться заголовок.
https://shiny.rstudio.com/reference/shiny/0.14/tabPanel.html
Таким образом, одним из решений является:
library(shiny)
ui <- basicPage(
navbarPage("App", id = "nav",
navbarMenu("Top 1",
tabPanel("Sub 1", "Top 1, Sub 1", value = "top1/sub1"),
tabPanel("Sub 2", "Top 1, Sub 2", value = "top1/sub2")
),
navbarMenu("Top 2",
tabPanel("Sub 1", "Top 2, Sub 1", value = "top2/sub1"),
tabPanel("Sub 2", "Top 2, Sub 2", value = "top2/sub2")
)
)
)
server <- function(input, output, session) {}
shinyApp(ui = ui, server = server)
что дает
app <- ShinyDriver$new("../../")
app$snapshotInit("mytest")
app$setInputs(nav = "top1/sub2")
app$setInputs(nav = "top2/sub1")
app$setInputs(nav = "top2/sub2")
app$snapshot()