问题描述
我正在尝试在Shiny应用程序上进行一些集成测试,但是我不知道自己做错了什么。我怀疑这与我尝试访问可能性,颜色和RiskMessage变量时两次使用“ $”有关。 我一直遇到这个错误:
Error in checkEqualsNumeric(output$coloredBox$likelihoodofHarm,0.75) :
Modes: NULL,numeric
Lengths: 0,1
target is NULL,current is numeric
这是我的Shiny应用程序代码,我尝试在底部测试Shiny应用程序。任何帮助将不胜感激!
displayColoredBox<- function(color,riskMessage){
sidebarPanel(style=sprintf("background-color: %s; width: 300px; height: 300px;",color),h3(sprintf("%s",riskMessage)) ) }
app <- shinyApp(
ui = fluidPage(
div(
id = "form",sliderInput("count1","First Slider Input",value=0,min=0,max=5000),sliderInput("count2","Second Slider Input",uIoUtput("coloredBox")
)),server <- function(input,output,session) {
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!"
}
coloredBox=displayColoredBox(color,riskMessage)
})
}
)
testServer(app,{
session$setInputs(count1 = 1500)
session$setInputs(count2 = 2500)
checkEqualsNumeric(output$coloredBox$likelihood,0.75)
checkEquals(output$coloredBox$riskMessage,"Very high risk!")
checkEquals(output$coloredBox$color,"orange")
})
解决方法
Shiny Apps中的
output
对象不是您可以尝试访问的列表。相反,它们是HTML对象。闪亮的方式如下:将值存储为根据输入而变化的电抗。检查电抗器是否具有所需的值。
displayColoredBox<- function(color,riskMessage){
sidebarPanel(style=sprintf("background-color: %s; width: 300px; height: 300px;",color),h3(sprintf("%s",riskMessage)) ) }
library(RUnit)
app <- shinyApp(
ui = fluidPage(
div(
id = "form",sliderInput("count1","First Slider Input",value=0,min=0,max=5000),sliderInput("count2","Second Slider Input",uiOutput("coloredBox")
)),server <- function(input,output,session) {
likelihood <- reactive((input$count1*input$count2)/5000000)
boxValues <- reactiveValues(color="",riskMessage="")
observe({
req(input$count1)
req(input$count2)
if (likelihood()>1) {
boxValues$color="red"
boxValues$riskMessage="Extreme risk!"
} else if (likelihood()>.65){
boxValues$color="orange"
boxValues$riskMessage="Very high risk!"
}
else if (likelihood()>.35){
boxValues$color="yellow"
boxValues$riskMessage="High risk!"
}
else if (likelihood()>.10){
boxValues$color="blue"
boxValues$riskMessage="Moderate risk!"
} else {
boxValues$color="green"
boxValues$riskMessage="Low risk!"
}
})
output$coloredBox<-renderUI({
displayColoredBox(boxValues$color,boxValues$riskMessage)
})
}
)
testServer(app,{
session$setInputs(count1 = 1500)
session$setInputs(count2 = 2500)
checkEquals(likelihood(),0.75)
checkEquals(boxValues$riskMessage,"Very high risk!")
checkEquals(boxValues$color,"orange")
})