`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_* 产生的错误,而不是让它们正常传播。