recommendation - seo meta descriptions
¿Hay algo en la prueba que como expect_no_warnings()? (4)
En versiones aún más recientes de "prueba que" (desde 0.11.0 ) puedes hacer:
expect_warning(my.func(), regexp = NA)
De la documentación de expect_error
expresiones regulares: expresión regular para probar. Si se omite, simplemente afirma que el código produce algún resultado, mensaje, advertencia o error. Alternativamente, puede especificar NA para indicar que no debe haber salida, mensajes, advertencias o errores.
Entonces, de la misma manera puedes probar que no hay mensajes, errores y resultados.
Estoy escribiendo pruebas para una función que bajo ciertas condiciones generará advertencias. Quiero asegurarme de que en las demás condiciones no produzca advertencias. No veo una manera obvia de probar eso fácilmente con la prueba que. Supongo que podría hacer algo como:
my.result <- 25
my.func <- function() my.result
expect_equal(
withCallingHandlers(
my.func(), warning=function() stop("A Warning!")
),
my.result
)
o use options(warn=2)
, pero esperaba que hubiera algo como:
expect_no_warnings(my.func())
¿Me estoy perdiendo algo obvio?
En versiones recientes de testthat, simplemente puedes hacer:
expect_that(my.func(), not(gives_warning()))
Puedes verificar si expect_warning()
falla. Lo siguiente resuelve el problema de otro tipo de salida producida por my.func()
y not()
desuso:
expect_failure(expect_warning(my.func()))
Actualización: use expect_silent()
hoy en día porque expect_that
está en desuso, consulte la ayuda para la función.
Actualización 2: Como lo mencionó @eaglefreeman, la respuesta utilizando expect_warning
con el parámetro regexp
establecido en NA
es la mejor solución, ya que mi respuesta hace que la prueba falle incluso si no se emitió una advertencia pero solo se imprimió un mensaje. Esto no es lo que quería el OP (pero simplemente ignorar las advertencias). No borro esta respuesta para dejar clara esta diferencia para otros lectores.
De los ejemplos de la ayuda:
expect_silent("123")
f <- function() {
message("Hi!")
warning("Hey!!")
print("OY!!!")
}
expect_silent(f())
Advertencia: ¡ expect_silent
tampoco espera salida, por lo que la semántica es un poco diferente!