C'è un modo, ma non è così liscio come vorresti. Dovrai chiamare le funzioni testthat
all'interno del tuo blocco @examples
. Ecco un esempio di funzione:
#' @examples
#' testStrings <- c("1234567890",
#' "123 456 7890")
#'
#' testthat::expect_equal(extractPhoneNumbers(testStrings), "0123")
extractPhoneNumbers <- function(inputStr) {
# check input:
if (!is.character(inputStr)) {
stop("'inputStr' must be a (vector of) string(s)!")
}
# imports
`%>%` <- stringr::`%>%`
replace_all <- stringr::str_replace_all
extract_all <- stringr::str_extract_all
# intermediary regex's
visualDelimitersRegex <- "[()+\\-_. ]"
phoneNumberRegex <- "[:digit:]{10}"
inputStr %>%
replace_all(pattern = visualDelimitersRegex, replacement = "") %>%
extract_all(pattern = phoneNumberRegex)
}
Quando si esegue devtools::run_examples()
o devtools::check
, entrambi saranno gettare errori in quanto la chiamata a testthat::expect_equal()
genera un errore.
Esempio di output da devtools::check
sembra
*** SNIP ***
* checking for unstated dependencies in examples ... OK
* checking examples ... ERROR
Running examples in ‘demoPkg-Ex.R’ failed
The error most likely occurred in:
> base::assign(".ptime", proc.time(), pos = "CheckExEnv")
> ### Name: extractPhoneNumbers
> ### Title: Extract Phone Numbers
> ### Aliases: extractPhoneNumbers
>
> ### ** Examples
>
> testStrings <- c("1234567890",
+ "123 456 7890")
>
> testthat::expect_equal(extractPhoneNumbers(testStrings), "0123")
Error: extractPhoneNumbers(testStrings) not equal to "0123"
Modes: list, character
Length mismatch: comparison on first 1 components
Component 1: 1 string mismatch
Execution halted
* checking for unstated dependencies in ‘tests’ ... OK
* checking tests ...
Running ‘testthat.R’
OK
* checking PDF version of manual ... OK
* DONE
Status: 1 ERROR
Leggendo la documentazione, questo sembra che confermerà che gli esempi correvano senza errori, ma non apparire come esso deve svolgere test di precisione. Immagino di poter eseguire i miei esempi dove richiedono precisione, ma questo non lo inserisce direttamente nel framework di test. Se non ci sono altre risposte imminenti, imposterò questa come risposta. Ma, spero anche in un modo per confermare l'accuratezza degli esempi. –
Più direttamente, 'testthat :: test_examples' eseguirà gli esempi nel pacchetto durante il test. I test passano quando non ci sono errori durante l'esecuzione degli esempi. –