2014-07-15 9 views
5

Sto usando l'eccellente pacchetto testthat in R. Il mio problema è che non riesco a vedere alcun output dalla funzione message() nel codice che è testato quando si utilizza test_file. per esempio, dire che sono seguente codice in un file chiamato test_message.RR testthat pacchetto: Come posso vedere l'output da message() quando si usa test_file()

f <- function() { 
    message ("Message: Hello world") 
    cat ("Cat: Hello world\n") 
    return (1) 
} 

test_that ("message shows up", { 
    expect_equal(f(), 1) 
}) 

corro file_prova come segue e ottenere l'output sotto

> test_file("test_message.R") 
Cat: Hello world 
. 

Quindi io non sto vedendo il testo dal messaggio() .

Tuttavia, quando si esegue il codice sul proprio Io lo vedo:

> f() 
Message: Hello world 
Cat: Hello world 
[1] 1 

so che per impostazione predefinita, il messaggio() scrive su stderr e gatto scrive su stdout e sto indovinando che file_prova "intercetta" stderr per verificare il testo in avvisi ed errori. C'è un modo in cui posso configurare le cose così vedo il messaggio message() sulla console?

+0

Posso chiedere perché si desidera vedere l'output del messaggio durante l'esecuzione dei test? – Dason

+0

Metto le chiamate message() nel codice in primo luogo per registrare il progresso del codice. Mi piacerebbe vedere quei messaggi mentre si eseguono i test per sapere fino a che punto siamo arrivati ​​fino a quando il codice non è riuscito e per vedere che i messaggi stessi stanno funzionando correttamente. Sembra che avrò bisogno di usare un altro meccanismo per questo – user2793761

risposta

3

Non è possibile farlo, almeno non senza modificare il codice sorgente di testthat. Questa è la parte che esegue il codice del test: https://github.com/hadley/testthat/blob/0af22cfc7c7f6b13b02537f0d37d96d72d8a98b7/R/test-that.r#L65 Se si rimuove lo suppressMessages dalla funzione test_code, i messaggi verranno visualizzati.

Btw. testthat fa non acquisizione standard output o errore AFAIK, quindi se si scrive su di esso utilizzando cat o in qualche altro modo, che verrà anche visualizzato.

7

Questo è il mio post inaugurale su SO, in una lingua che ho appena iniziato a studiare due settimane fa, quindi sii gentile.

Credo che quanto segue è quello che stai cercando:

test_that ("message shows up", { 
    expect_message(f(), "^Message: Hello world\\n") 
}) 

Inoltre, vedere la documentazione relativa shows_message & expect_message a pagina 23 del testthat.pdf (per riferimento futuro: pubblicato 2014/02/22 00: 25:04 per v0.8.1).

E pieno credito a GSee per https://stackoverflow.com/a/24476491/3811916 che è il secondo post dopo questo che ho visualizzato quando si cerca di testare per lo stesso problema.

Ho appena scoperto evaluate_promise (anche nel pdf collegato sopra). Quindi ecco un'alternativa che testerà il messaggio e stamperà l'output:

test_that ("message shows up", { 
    result <- evaluate_promise(f(), print = TRUE) 
    expect_that(result$message, equals("Message: Hello world\n")) 
    print(result$output) 
}) 
+1

Grazie. Questo è perfetto per testare il messaggio che sto cercando. Il problema è che volevo davvero vedere i messaggi che stampavano come avrebbero fatto durante l'esecuzione, non solo test esistono. Posso vivere senza questa capacità e utilizzare il tuo suggerimento per testare i messaggi o semplicemente osservare i messaggi in un ambiente non testuale. – user2793761

+0

@ user2793761 ha aggiunto un'alternativa che utilizza 'evaluate_promise' che potrebbe soddisfare. – eddies

Problemi correlati