2016-03-31 20 views
12

Vì vậy, tôi đã viết một ứng dụng sáng bóng khá được làm sạch và trong tương lai sẽ cần cập nhật vì chức năng đằng sau những gì đang chạy liên tục thay đổi.Đơn vị kiểm tra ứng dụng sáng bóng

Những gì tôi cần làm là kiểm tra đơn vị (sử dụng testthat hoặc thư viện khác hữu ích hơn cho các ứng dụng sáng bóng) cho phép tôi chạy các thử nghiệm này theo cách tự động hơn.

Tôi đã viết một ứng dụng sáng bóng đơn giản. Vì lợi ích của việc thử nghiệm trong điều này sẽ giống như một cách để biết rằng nếu tôi chọn số 20 trong đầu vào số sau đó tôi nhận được 400 là văn bản đầu ra $. Nhưng muốn có thể làm điều này mà không thực sự tự chạy ứng dụng.

library(shiny) 

ui <- fluidPage(title = 'Test App', 
    numericInput('num', 'Number', 50, 1, 100, 0.5), 
    'Numeric output', 
    textOutput('out') 
) 

server <- function(input, output, session) { 
    aux <- reactive(input$num^2) 

    output$out <- renderText(aux()) 
} 

shinyApp(ui = ui, server = server) 
+3

Tôi tin rằng bạn đang tìm kiếm [RSelenium] (https://cran.r-project.org/web/packages/RSelenium/). Xem họa tiết "họa tiết" ("shinytesting"), "RSelenium"). Nó dường như có một chút của một đường cong học tập mặc dù. – cdeterman

+0

Cảm ơn, điều này trông giống như chính xác những gì tôi cần. Chỉ cần tìm ra cách để truy cập vào các máy chủ Selenium trong khi làm việc! –

+3

Selenium không phải là thử nghiệm đơn vị kỹ thuật. Tôi nghĩ về cơ bản nếu bạn muốn thử nghiệm đơn vị bạn phải phân hủy chức năng của ứng dụng RShiny cho đến khi bạn có thể sử dụng testthat –

Trả lời

0

Tôi thấy hai cách tiếp cận tiềm năng ở đây - thử nghiệm các chức năng cơ bảnkiểm tra việc thực hiện của các ứng dụng web riêng của mình. Lưu ý rằng sau này thực sự sẽ yêu cầu chạy máy chủ, nhưng là một đại diện chính xác hơn nếu ứng dụng web của bạn hoạt động hay không.

Bằng cách kiểm tra chức năng cơ bản, ý tôi là tái cấu trúc các phép tính bạn hiện đang thực hiện trong máy chủ với các chức năng độc lập của riêng chúng. Thay vì bình phương số trực tiếp trong máy chủ, bạn nên tách các chức năng khỏi máy chủ để nó có thể được kiểm tra. Ví dụ: như vậy:

square_of_number <- function(n) return(n^2) 

Bây giờ, bạn có thể kiểm tra riêng hàm square_of_number.

library('testthat') 

square_of_number <- function(n) return(n^2) 

expect_equal(square_of_number(4), 16) 

Hơn nữa, nếu bạn muốn thử nghiệm ứng dụng, bạn cũng có thể tạo thử nghiệm bằng trình duyệt không đầu trên giao diện người dùng thực tế mà bạn tạo bằng Shiny. Một phương pháp như đề nghị trong các ý kiến ​​được sử dụng Shinytest, nhưng có một cách tiếp cận mà tôi muốn đề nghị cố gắng là:

  • Chạy máy chủ với một cổng cụ thể,
  • Giao diện máy chủ này với một công cụ như rvest hoặc RSelenium để thao tác trang và sau đó cạo đầu ra,
  • sau đó xác minh đầu ra cho biết với testthat.
1

Như nhiều người đã đề cập, bạn có thể sử dụng gói quảng cáo sáng bóng kết hợp với testthat.

Dưới đây là một ví dụ đơn giản:

library(shinytest) 
library(testthat) 

context("Test shiny app") 

#open shiny app 
app <- ShinyDriver$new('path_to_shiny_app') 

test_that("app gets expected output", { 
    #set numeric input 
    app$setInputs(num = 20) 
    #get output 
    output <- app$getValue(name = "out") 
    #test 
    expect_equal(output, "400") 
}) 

#stop shiny app 
app$stop()