3

如果我跟随,行为是预期的。没有返回任何东西

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

4

1 回答 1

2

你误解了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_*而不是让它们正常传播。

于 2015-10-05T14:13:30.940 回答