2016-01-09 8 views
5

Wie kann man alle Tests im Testverzeichnis eines R-Pakets überspringen, wenn die testthat/devtools-Infrastruktur verwendet wird? Zum Beispiel, wenn es keine Verbindung zu einer Datenbank gibt und alle Tests auf diese Verbindung angewiesen sind, muss ich eine skip in allen Dateien einzeln schreiben oder kann ich irgendwo eine skip schreiben?Überspringe alle Tests, wenn die Bedingung nicht erfüllt wird

Ich habe ein Standard-Paket-Setup, das

  • Tests/
    • testthat.R
    • wie

      mypackage/

      • ... # andere Paket Zeug sieht testthat/
        • Test-thing1.R
        • Test-thing2.R

    Zuerst dachte ich, ich

    ## in testthat.R 
    library(testthat) 
    library(mypackage) 
    
    fail_test <- function() FALSE 
    if (fail_test()) test_check("package") 
    
    einen Test in der testthat.R Datei wie

    setzen könnte

    aber, das hat nicht funktioniert und es sieht aus wie Aufruf devtools::test() ignoriert nur diese Datei. Ich denke, eine Alternative wäre, alle Tests in einem anderen Verzeichnis zu speichern, aber gibt es eine bessere Lösung?

  • +0

    In diesem Beispiel würden Sie 'if (fail_test())' ... – Thomas

    Antwort

    0

    Vielleicht können Sie Tests in Unterverzeichnissen organisieren, bedingtes Verzeichnis Aufnahme in einem übergeordneten Ordner Test setzen:

    Betrachten 'Tests' in testthat Paket. Insbesondere diese sieht interessant:

    Ich sehe nicht, hier nichts enthält, die Unterverzeichnisse in Test-Scan recurses:

    1

    Der Abschnitt Skipping a test im Buch R Packages behandelt diesen Anwendungsfall. Im Wesentlichen schreiben Sie eine benutzerdefinierte Funktion, die alle zu überprüfenden Bedingungen prüft - ob Sie eine Verbindung zu Ihrer Datenbank herstellen können oder nicht - und dann diese Funktion von allen Tests aufrufen, bei denen diese Bedingung erfüllt sein muss.

    Beispiel aus dem Buch parroted:

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

    ich diesen Ansatz nützlicher als ein einziger Schalter gefunden habe alle Tests zu wechseln ab, da ich eine Mischung aus Test zu haben, neigen dazu, die tun und nicht tun Verlasse dich auf jede Bedingung, die ich überprüfe, und ich möchte immer so viele Tests wie möglich durchführen.

    Verwandte Themen