2016-01-09 15 views
5

Qual è il modo corretto di saltare tutti i test nella directory di test di un pacchetto R quando si utilizza l'infrastruttura testthat/devtools? Ad esempio, se non vi è alcuna connessione a un database e tutti i test si basano su tale connessione, è necessario scrivere uno skip in tutti i file singolarmente o posso scrivere un singolo skip da qualche parte?Salta tutti i test di test quando la condizione non è soddisfatta

Ho una configurazione pacchetto standard che assomiglia

mypackage/

  • ... # altre cose pacchetto
  • test/
    • testthat.R
    • testthat/
      • test-thing1.R
      • test-thing2.R

In un primo momento ho pensato che avrei potuto mettere un test nel file testthat.R come

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

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

ma, che non ha funzionato e sembra che chiamare devtools::test() semplicemente ignora quel file. Immagino che un'alternativa sarebbe quella di memorizzare tutti i test in un'altra directory, ma c'è una soluzione migliore?

+0

In questo esempio, è necessario 'if (fail_test())' ... – Thomas

risposta

0

Forse si può organizzare prove in sottodirectory, mettendo directory condizionale l'inclusione in un test cartella principale:

consideri 'test' in testthat pacchetto. In particolare, questo sembra interessante:

non vedo qui nulla che recurses sottodirectory nella scansione di prova:

1

La sezione Skipping a test nel libro Pacchetti R copre questo caso d'uso. In sostanza, si scrive una funzione personalizzata che controlla qualsiasi condizione che si desidera controllare - indipendentemente dal fatto che sia possibile connettersi al proprio database - e quindi chiamare quella funzione da tutti i test che richiedono che tale condizione sia soddisfatta.

Esempio, pappagallo dal libro:

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

ho trovato questo approccio più utile di un unico interruttore per attivare fuori tutti i test da quando ho tendono ad avere un mix di test che fare e non fare fare affidamento su qualsiasi condizione che sto controllando e voglio eseguire sempre il maggior numero di test possibile.

Problemi correlati