2016-01-09 53 views
5

Jaki jest właściwy sposób na pominięcie wszystkich testów w katalogu testowym pakietu R podczas korzystania z infrastruktury testthat/devtools? Na przykład, jeśli nie ma połączenia z bazą danych, a wszystkie testy polegają na tym połączeniu, czy muszę napisać osobno skip we wszystkich plikach lub czy mogę gdzieś napisać pojedynczy kod skip?Pomiń wszystkie testy testowe, gdy warunek nie jest spełniony

Mam standardową konfigurację pakietu, który wygląda jak

mypackage/

  • ... # innych rzeczy pakiet
  • testy/
    • testthat.R
    • testthat/
      • test-thing1.R
      • test-thing2.R

Na początku myślałem, że mogę umieścić test w pliku testthat.R jak

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

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

, ale to nie zadziałało i wygląda na to, że wywołanie devtools::test() powoduje zignorowanie tego pliku. Sądzę, że alternatywą byłoby przechowywanie wszystkich testów w innym katalogu, ale czy istnieje lepsze rozwiązanie?

+0

W tym przykładzie potrzebowałbyś 'if (fail_test())' ... – Thomas

Odpowiedz

0

Może można organizować testy w podkatalogów, stawiając warunkową publikację katalogów w teście folderu parent:

Rozważmy „testów” w testthat opakowaniu. W szczególności, ten wygląda interesująco:

Nie widzę tu nic, co recurses podkatalogów w skanu testu:

1

Sekcja Skipping a test w książce R Packages obejmuje ten przypadek użycia. Zasadniczo, piszesz niestandardową funkcję, która sprawdza dowolny warunek, który musisz sprawdzić - czy możesz połączyć się z bazą danych - a następnie wywołujesz tę funkcję ze wszystkich testów, które wymagają spełnienia tego warunku.

Przykład, parroted z książki:

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() 
    ... 
}) 

Znalazłem ten podejście bardziej użyteczne niż jednego przełącznika, aby przełączać się wszystkie testy ponieważ mają tendencję do mieszankę teście że zrobić I nie polegać na każdym stanie, który sprawdzam i chcę zawsze przeprowadzać jak najwięcej testów.