`test_that` 中的 `expect_error` 不起作用
`expect_error` inside `test_that` does not work
如果我 运行 跟随,行为是预期的。什么都没有返回
expect_error(expect_true(FALSE))
当我运行同样的代码,但是包裹在里面test_that
test_that("expect_error should not fail",{
expect_error(expect_true(FALSE))
})
Error: Test failed: 'expect_error should not fail'
* Not expected: FALSE isn't true.
* Not expected: expect_true(FALSE) code did not generate an error.
输出很奇怪,意味着 expect_true(FALSE)
在 test_that
内折叠时不会产生错误。
如何将 expect_error
放入 test_that
中?
更新
我使用 testthat
进行代码断言。有一个包 assertthat
。
您误解了 expect_error
的意思。它应该捕获用户代码中的错误,而不是测试中的错误。
expect_that
会产生一个错误,但是这个错误会在test_that
里面处理之前expect_error
会有机会处理它.
不要将 expect_*
调用包装在 expect_error
中。直接使用 expect_error
有效:
test_that('expect_error catches error conditions', {
expect_error(stop('foo'))
})
行为上的不一致是因为 test_that
会捕获 expect_*
产生的错误,而不是让它们正常传播。
如果我 运行 跟随,行为是预期的。什么都没有返回
expect_error(expect_true(FALSE))
当我运行同样的代码,但是包裹在里面test_that
test_that("expect_error should not fail",{
expect_error(expect_true(FALSE))
})
Error: Test failed: 'expect_error should not fail'
* Not expected: FALSE isn't true.
* Not expected: expect_true(FALSE) code did not generate an error.
输出很奇怪,意味着 expect_true(FALSE)
在 test_that
内折叠时不会产生错误。
如何将 expect_error
放入 test_that
中?
更新
我使用 testthat
进行代码断言。有一个包 assertthat
。
您误解了 expect_error
的意思。它应该捕获用户代码中的错误,而不是测试中的错误。
expect_that
会产生一个错误,但是这个错误会在test_that
里面处理之前expect_error
会有机会处理它.
不要将 expect_*
调用包装在 expect_error
中。直接使用 expect_error
有效:
test_that('expect_error catches error conditions', {
expect_error(stop('foo'))
})
行为上的不一致是因为 test_that
会捕获 expect_*
产生的错误,而不是让它们正常传播。