闪亮应用程序的集成测试
Integration testing on Shiny apps
我正尝试在这个闪亮的应用程序上使用集成测试,但在阅读它之后,我不确定我做错了什么。我不断收到此错误:isModuleServer(app) 中出错:找不到对象 'session'
我也收到此错误:错误:找不到对象 'output'
感谢任何帮助。
library(shiny)
displayColoredBox<- function(color, riskMessage){
sidebarPanel(style=sprintf("background-color: %s; width: 300px; height: 300px;", color),
h3(sprintf("%s", riskMessage)) ) }
shinyApp(
ui = fluidPage(
div(
id = "form",
sliderInput("count1", "First Slider Input", value=0, min=0, max=5000),
sliderInput("count2", "Second Slider Input", value=0, min=0, max=5000),
uiOutput("coloredBox")
)),
server <- function(input, output) {
output$coloredBox<-renderUI({
req(input$count1)
req(input$count2)
count1 <- input$count1;
count2 <- input$count2;
likelihood <- (count1*count2)/5000000
if (likelihood>1) {
color="red"
riskMessage="Extreme risk!"
} else if (likelihood>.65){
color="orange"
riskMessage="Very high risk!"
}
else if (likelihood>.35){
color="yellow"
riskMessage="High risk!"
}
else if (likelihood>.10){
color="blue"
riskMessage="Moderate risk!"
} else {
color="green"
riskMessage="Low risk!"
}
displayColoredBox(color, riskMessage)
})
}
)
testServer({
session$setInputs(count1 = 1500)
session$setInputs(count2 = 2500)
stopifnot(output$likelihood == 0.75)
stopifnot(output$riskMessage == "Very high risk!")
stopifnot(output$color == "orange")
})
将您的应用分配给一个对象,该对象必须是 testServer
的第一个参数。另外,声明你的 server
函数有一个 session
参数。
编辑:为了在 shinyTest
中使用您的变量,我们使用 reactive
其中 returns 和 list
以及您要测试的组件.
app <- shinyApp(
ui = fluidPage(
div(
id = "form",
sliderInput("count1", "First Slider Input", value=0, min=0, max=5000),
sliderInput("count2", "Second Slider Input", value=0, min=0, max=5000),
uiOutput("coloredBox")
)),
server <- function(input, output, session) {
getRiskAndColor<-reactive({
req(input$count1)
req(input$count2)
count1 <- input$count1;
count2 <- input$count2;
likelihood <- (count1*count2)/5000000
if (likelihood>1) {
color="red"
riskMessage="Extreme risk!"
} else if (likelihood>.65){
color="orange"
riskMessage="Very high risk!"
}
else if (likelihood>.35){
color="yellow"
riskMessage="High risk!"
}
else if (likelihood>.10){
color="blue"
riskMessage="Moderate risk!"
} else {
color="green"
riskMessage="Low risk!"
}
list(color=color, riskMessage=riskMessage, likelihood=likelihood)
})
output$coloredBox<-renderUI({
colorRisk<-getRiskAndColor()
displayColoredBox(colorRisk$color, colorRisk$riskMessage)
})
}
)
接下来,我们用 app
喂养 testServer
。请注意,getRiskAndColor
反应值及其组件是可访问的。
testServer(app, {
session$setInputs(count1 = 1500)
session$setInputs(count2 = 2500)
rc<-getRiskAndColor()
stopifnot(rc$likelihood == 0.75)
cat("Correct likelihood value!\n")
stopifnot(rc$riskMessage == "Very high risk!")
cat("Correct risk message!\n")
stopifnot(rc$color == "orange")
cat("Correct color!\n")
})
#Correct likelihood value!
#Correct risk message!
#Correct color!
成功!
我正尝试在这个闪亮的应用程序上使用集成测试,但在阅读它之后,我不确定我做错了什么。我不断收到此错误:isModuleServer(app) 中出错:找不到对象 'session' 我也收到此错误:错误:找不到对象 'output'
感谢任何帮助。
library(shiny)
displayColoredBox<- function(color, riskMessage){
sidebarPanel(style=sprintf("background-color: %s; width: 300px; height: 300px;", color),
h3(sprintf("%s", riskMessage)) ) }
shinyApp(
ui = fluidPage(
div(
id = "form",
sliderInput("count1", "First Slider Input", value=0, min=0, max=5000),
sliderInput("count2", "Second Slider Input", value=0, min=0, max=5000),
uiOutput("coloredBox")
)),
server <- function(input, output) {
output$coloredBox<-renderUI({
req(input$count1)
req(input$count2)
count1 <- input$count1;
count2 <- input$count2;
likelihood <- (count1*count2)/5000000
if (likelihood>1) {
color="red"
riskMessage="Extreme risk!"
} else if (likelihood>.65){
color="orange"
riskMessage="Very high risk!"
}
else if (likelihood>.35){
color="yellow"
riskMessage="High risk!"
}
else if (likelihood>.10){
color="blue"
riskMessage="Moderate risk!"
} else {
color="green"
riskMessage="Low risk!"
}
displayColoredBox(color, riskMessage)
})
}
)
testServer({
session$setInputs(count1 = 1500)
session$setInputs(count2 = 2500)
stopifnot(output$likelihood == 0.75)
stopifnot(output$riskMessage == "Very high risk!")
stopifnot(output$color == "orange")
})
将您的应用分配给一个对象,该对象必须是 testServer
的第一个参数。另外,声明你的 server
函数有一个 session
参数。
编辑:为了在 shinyTest
中使用您的变量,我们使用 reactive
其中 returns 和 list
以及您要测试的组件.
app <- shinyApp(
ui = fluidPage(
div(
id = "form",
sliderInput("count1", "First Slider Input", value=0, min=0, max=5000),
sliderInput("count2", "Second Slider Input", value=0, min=0, max=5000),
uiOutput("coloredBox")
)),
server <- function(input, output, session) {
getRiskAndColor<-reactive({
req(input$count1)
req(input$count2)
count1 <- input$count1;
count2 <- input$count2;
likelihood <- (count1*count2)/5000000
if (likelihood>1) {
color="red"
riskMessage="Extreme risk!"
} else if (likelihood>.65){
color="orange"
riskMessage="Very high risk!"
}
else if (likelihood>.35){
color="yellow"
riskMessage="High risk!"
}
else if (likelihood>.10){
color="blue"
riskMessage="Moderate risk!"
} else {
color="green"
riskMessage="Low risk!"
}
list(color=color, riskMessage=riskMessage, likelihood=likelihood)
})
output$coloredBox<-renderUI({
colorRisk<-getRiskAndColor()
displayColoredBox(colorRisk$color, colorRisk$riskMessage)
})
}
)
接下来,我们用 app
喂养 testServer
。请注意,getRiskAndColor
反应值及其组件是可访问的。
testServer(app, {
session$setInputs(count1 = 1500)
session$setInputs(count2 = 2500)
rc<-getRiskAndColor()
stopifnot(rc$likelihood == 0.75)
cat("Correct likelihood value!\n")
stopifnot(rc$riskMessage == "Very high risk!")
cat("Correct risk message!\n")
stopifnot(rc$color == "orange")
cat("Correct color!\n")
})
#Correct likelihood value!
#Correct risk message!
#Correct color!
成功!