2015-10-05 66 views
1

如果我运行下面,行为是预期的。没有返回`test_that`里面的`expect_error`不起作用

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. 

输出是奇怪的,意味着当内test_that折叠expect_true(FALSE)不产生错误。

如何将expect_error放入test_that

UPDATE

我用testthat代码断言。有包assertthat

回答

1

您误解了expect_error的意思。它应该捕捉用户代码中的错误,而不是测试中的错误。

expect_that会产生错误,但这个错误将里面test_that处理expect_error之前将有机会来对待它。

请勿在expect_error内包装expect_*呼叫。使用expect_error直接作用:

test_that('expect_error catches error conditions', { 
    expect_error(stop('foo')) 
}) 

行为的不一致来自于一个事实,即test_that将赶上由expect_*,而不是让它们正常传播产生的错误。

+0

它没有任何意义。试试看:'expect_error(expect_true(FALSE))'没问题。 'expect_error(expect_true(TRUE))'给出'错误:expect_true(TRUE)代码没有产生错误'。这意味着'expect_true(FALSE)'产生错误并且是预期的。 –

+0

@CronAcronis其实,从头开始。我正在改变我的答案,这是一个错误。 –

+0

@CronAcronis看看这对你是否更有意义。 –

相关问题