I ont la fonction suivante:R TryCatch avec testthat attente
fun = function(expr) {
mc = match.call()
env = as.environment(within(
list(),
expr = eval(mc$expr)
))
return(env)
}
qui est appelée dans un tryCatch()
de sorte que toutes les conditions d'erreur dans expr
sont traitées avec élégance.
Il fonctionne très bien avec une condition d'erreur standard:
tryCatch({
fun({
stop('error')
})
}, error = function(e) {
message('error happened')
})
# error happened
Cependant, il ne tient pas compte testthat
erreurs d'anticipation (qui est préféré pour mon cas spécifique d'usage):
library(testthat)
tryCatch({
fun({
expect_true(FALSE)
})
}, error = function(e) {
message('expectation not met')
})
# Error: FALSE isn't true.
ou plus simplement :
library(testthat)
tryCatch({
expect_true(FALSE)
}, error = function(e) {
message('expectation not met')
})
# Error: FALSE isn't true.
L'erreur d'anticipation n'est pas détectée.
Ce problème est apparu après la mise à niveau de R 3.2.2 vers R 3.3.0 - c'est-à-dire que les erreurs d'anticipation ont été interceptées dans R 3.2.2.
Existe-t-il un moyen de faire testthat
attentes attrapées par tryCatch()
dans R 3.3.0?
Les fonctions '' appel de expect_xxx' expect' qui appelle à son tour 'withRestarts'. Je ne sais pas exactement ce que cela fait, mais cela semble être la racine du problème que vous avez. – Dason
@Dason Oui, j'ai remarqué ça. Je ne suis pas sûr que cela ait toujours été le cas (par exemple lorsque j'ai développé mon code avec R 3.2.2). Idéalement, je préférerais contourner son comportement actuel sans avoir à patcher des singes. – oddHypothesis