如何使用 R 中的 testthat 测试错误和特定错误消息

How to test for an error and specific error message using testthat in R

我正在尝试编写一个测试,以确保在给定特定输入的情况下,函数

  1. 错误
  2. 提供特定的错误消息

我正在使用 testthat::expect_error()

例子

作为一个非常简单、可重现的例子,假设我们有一个乘法函数

test_funct <- function(x) { x * 2 } 

还有一个非常简单的测试,用于测试在提供 class 字符输入时它是否出错:

test_that(
  "function errors when it receives a character object", 
  { test_funct("a") %>% expect_error("non-numeric argument to binary operator") } 
  )

问题

我期待这个测试通过,因为 "a" 是 class 字符,并且确实会产生提供给 expect_error() 的错误消息(即 "non-numeric argument to binary operator")。

然而,测试并没有通过,而是返回:

Error: Test failed: 'function errors when it receives a character object'
* non-numeric argument to binary operator
1: test_funct("a") %>% expect_error("non-numeric argument to binary operator")
2: eval(lhs, parent, parent)
3: eval(lhs, parent, parent)
4: test_funct("a")

如何创建一个测试来检查函数错误并提供特定的错误消息?

不要使用管道运算符。它应该可以工作,但它会抛出你得到的错误。至少使用 testthat 版本 2.0.1。如果我使用如下所示的 none 管道代码,则测试通过。

test_that(
  "function errors when it receives a character object", 
  { expect_error(test_funct("a"), "non-numeric argument to binary operator") } 
)