2016-01-09 15 views
5

Cách thích hợp để bỏ qua tất cả các thử nghiệm trong thư mục kiểm tra của gói R khi sử dụng cơ sở hạ tầng testthat/devtools là gì? Ví dụ: nếu không có kết nối với cơ sở dữ liệu và tất cả các thử nghiệm dựa trên kết nối đó, tôi có cần phải viết một skip trong tất cả các tệp riêng lẻ không hoặc tôi có thể viết một số skip ở đâu đó không?Bỏ qua tất cả các bài kiểm tra testthat khi điều kiện không đáp ứng

Tôi có một thiết lập gói tiêu chuẩn mà trông giống như

mypackage/

  • ... # khác gói thứ
  • kiểm tra/
    • testthat.R
    • testthat/
      • thử thing1.R
      • thử thing2.R

Lúc đầu, tôi nghĩ tôi có thể đặt một kiểm tra trong file testthat.R như

## in testthat.R 
library(testthat) 
library(mypackage) 

fail_test <- function() FALSE 
if (fail_test()) test_check("package") 

nhưng, điều đó không hoạt động và có vẻ như gọi devtools::test() chỉ bỏ qua tệp đó. Tôi đoán một thay thế sẽ là để lưu trữ tất cả các bài kiểm tra trong một thư mục khác, nhưng có một giải pháp tốt hơn?

+0

Trong ví dụ đó, bạn sẽ cần 'if (fail_test())' ... – Thomas

Trả lời

0

Có lẽ bạn có thể tổ chức kiểm tra trong thư mục con, đặt điều kiện bao gồm thư mục trong một thử nghiệm thư mục mẹ:

Xem xét 'thử nghiệm' trong testthat gói. Đặc biệt, một trong những điều này có vẻ thú vị:

Tôi không thấy ở đây không có gì mà recurses thư mục con trong thử nghiệm quét:

1

Phần Skipping a test trong sách R Packages bao gồm trường hợp sử dụng này. Về cơ bản, bạn viết một hàm tùy chỉnh kiểm tra bất kỳ điều kiện nào bạn cần kiểm tra - có hay không bạn có thể kết nối với cơ sở dữ liệu của bạn - và sau đó gọi hàm đó từ tất cả các thử nghiệm yêu cầu điều kiện đó phải thỏa mãn.

Ví dụ, parroted từ cuốn sách:

skip_if_no_db <- function() { 
    if (db_conn()) { 
    skip("API not available") 
    } 
} 

test_that("foo api returns bar when given baz", { 
    skip_if_no_db() 
    ... 
}) 

tôi đã tìm thấy phương pháp này có ích hơn một switch duy nhất để chuyển đổi tắt tất cả các xét nghiệm kể từ khi tôi có xu hướng có một sự pha trộn của bài kiểm tra đó làm và không dựa vào bất kỳ điều kiện nào tôi đang kiểm tra và tôi muốn luôn chạy càng nhiều bài kiểm tra càng tốt.

Các vấn đề liên quan