Предположим, я хочу обычай testthat
ожидания. Например, я тестирую множество объектов, чтобы увидеть, нет ли у них отсутствующих значений. testhat
способ написания вещей должно быть что-то вроде этого:Как вы можете протестировать пользовательское ожидание?
expect_no_nas <- function(object, info = NULL, label = NULL)
{
lab <- testthat:::make_label(object, label)
expect(has_no_nas(object), sprintf("%s has nulls.", lab),
info = info)
invisible(object)
}
has_no_nas <- function()
{
!any(is.na(x))
}
Как проверить, что это правильно?
Я могу написать тесты, которые проходят, без проблем.
test_that(
"expect_no_nas passes when there are no NAs",
{
expect_no_nas(1:5)
}
)
Я думал, что я мог бы обернуть пользовательские ожидания в expect_error
, но это не работает:
test_that(
"expect_no_nas fails when there are NAs",
{
expect_error(expect_no_nas(c(1, NA)))
}
)
## Error: Test failed: 'expect_no_nas fails when there are NAs'
## * Not expected: c(1, NA) has NAs.
## * Not expected: expect_no_nas(c(1, NA)) code raised an error.
Подведем в try
не работает.
test_that(
"expect_no_nas fails when there are NAs",
{
res <- try(expect_no_nas(c(1, NA)))
expect_false(res$passed)
}
)
## Error: Test failed: 'expect_no_nas fails when there are NAs'
## Not expected: c(1, NA) has NAs.
Как проверить наличие неисправных футляров? (Важно помнить, что мы проверяем, работает ли expect_no_nas
, а не только для написания тестов, которые используют expect_no_nas
.)
Я немного озадачен ... каков будет ваш ожидаемый результат? Функция дает ошибку, когда есть NA ... как предполагается, или я не понимаю, что вы пытаетесь сделать? – nico
Да, 'expect_no_nas' должен давать ошибку, когда есть NA. Но так как я хочу проверить функцию 'expect_no_nas', мне нужен мета-тест. То есть, (проходящий) тест, который проверяет, что 'expect_no_nas' завершился неудачно. Перечитав это, я понимаю, почему вы озадачены. –
Хорошо, теперь я понимаю, что вы имеете в виду! – nico