एक पैकेज विकसित करने के लिए, मैं testthat का उपयोग कर रहा हूं। मैं परीक्षण करना चाहता हूं कि क्या मेरे कार्य उचित संदेश और चेतावनियां भेजते हैं। मैं एक ही समय में कार्यों के परिणामों का परीक्षण करना चाहता हूं। इस तरह मैं इसे करने की कोशिश कर रहा हूं:

## R/foo.r
foo <- function() {
  message("This is a message")
  warning("This is a warning")
  "This is a result"
}

मैं ये परीक्षण लिखता हूं:

## tests/testthat/test-foo.R

test_that("foo works", {
  expect_equal(foo(), "This is a result")
  expect_message(foo(), "This is a message")
  expect_warning(foo(), "This is a warning")
})

लेकिन अब जब मैं परीक्षण चलाता हूं तो मेरे पास यह है:

Loading testWarnMess
Testing testWarnMess
v |  OK F W S | Context
/ |   0       | foo                                                                           This is a message
v |   3   2   | foo [0.3 s]                                                                   
----------------------------------------------------------------------------------------------
Warning (test-foo.R:2:3): foo works
This is a warning
Backtrace:
 1. testthat::expect_equal(foo(), "This is a result") test-foo.R:2:2
 4. testWarnMess::foo()

Warning (test-foo.R:3:3): foo works
This is a warning
Backtrace:
 1. testthat::expect_message(foo(), "This is a message") test-foo.R:3:2
 7. testWarnMess::foo()
----------------------------------------------------------------------------------------------

== Results ===================================================================================
Duration: 0.3 s

[ FAIL 0 | WARN 2 | SKIP 0 | PASS 3 ]
This is a message

जब मैं उनके होने की उम्मीद कर रहा हूं, तो परीक्षण परिणामों में संदेशों और चेतावनियों को देखने से कैसे रोकें?

0
pietrodito 9 मार्च 2021, 16:36

1 उत्तर

सबसे बढ़िया उत्तर

ऐसा करने का एक शानदार तरीका क्रिया विशेषण purrr::quietly का उपयोग करना है।

test_that("foo works", {
  qfoo <- purrr::quietly(foo)
  qfoo_call <- qfoo()
  expect_equal(qfoo_call$result, "This is a result")
  expect_equal(qfoo_call$message, "This is a message")
  expect_equal(qfoo_call$warning, "This is a warning")
})

0
pietrodito 19 मार्च 2021, 21:06