Как проверить сообщение об ошибке и конкретное сообщение об ошибке, используя testthat в R - PullRequest
1 голос
/ 13 апреля 2019

Я пытаюсь написать тест, который гарантирует, что при заданном входе функция

  1. ошибка
  2. предоставляет конкретное сообщение об ошибке

Я использую testthat::expect_error()

Пример

В качестве очень простого воспроизводимого примера предположим, что у нас есть функция умножения

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

И очень простой тест для проверки ошибок при вводе символа класса:

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

проблема

Я ожидал, что этот тест пройдёт, поскольку "a" имеет символ класса и действительно выдаст сообщение об ошибке, предоставленное 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")

Как создать тест, который проверяет наличие ошибок в функции и выдает определенное сообщение об ошибке?

1 Ответ

1 голос
/ 13 апреля 2019

Не используйте оператор трубы. Это должно работать, но выдает ошибку, которую вы получаете. По крайней мере, с тестом версии 2.0.1. Если я использую код без канала, как показано ниже, тест пройден.

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