`testthat` test выполняется при запуске в сеансе, но приводит к ошибке в тесте - PullRequest
2 голосов
/ 28 марта 2019

У меня проблема с testthat тестом ниже. конкретно первый тест.

Он запускается, когда я выполняю его напрямую (весь блок test_that()), но не работает при использовании testthat::test_file() в этом файле (и, очевидно, когда все тесты также выполняются). От

context("validate()")

x <- emeScheme_raw
print(validate( x = x, errorIfStructFalse = TRUE))

test_that(
  "validata_raw() returns correct value when correct",
  {
    expect_known_value(
      object = validate( x = x, errorIfStructFalse = TRUE),
      file = "validate.CORRECT.rda"
    )
  }
)

names(x)[1] <- "experiment"

test_that(
  "validata_raw() fails",
  {
    expect_known_value(
      object =  validate( x = x, errorIfStructFalse = FALSE),
      file = "validate.DIFFERENCES.rda"
    )
  }
)

test_that(
  "validata_raw() fails",
  {
    expect_error(
      object = validate( x = x, errorIfStructFalse = TRUE),
      regexp = ("Structure of the object to be evaluated is wrong. See the info above for details.")
    )
  }
)

Результаты в

 testthat::test_file("./tests/testthat/test-validate.R")
✔ | OK F W S | Context
⠙ |  1 1     | validate()Names: 1 string mismatch
✖ |  2 1     | validate() [0.8 s]
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
test-validate.R:10: error: validata_raw() returns correct value when correct
missing value where TRUE/FALSE needed
1: expect_known_value(object = validate(x = x, errorIfStructFalse = TRUE), file = "validate.CORRECT.rda") at ./tests/testthat/test-validate.R:10
2: compare(act$val, ref_val, ...)
3: compare.default(act$val, ref_val, ...)
4: all.equal(x, y, ...)
5: all.equal.list(x, y, ...)
6: all.equal(target[[i]], current[[i]], check.attributes = check.attributes, use.names = use.names, ...)
7: all.equal.list(target[[i]], current[[i]], check.attributes = check.attributes, use.names = use.names, ...)
8: all.equal(target[[i]], current[[i]], check.attributes = check.attributes, use.names = use.names, ...)
9: all.equal.list(target[[i]], current[[i]], check.attributes = check.attributes, use.names = use.names, ...)
10: all.equal(target[[i]], current[[i]], check.attributes = check.attributes, use.names = use.names, ...)
11: all.equal.default(target[[i]], current[[i]], check.attributes = check.attributes, use.names = use.names, ...)
12: all.equal.list(target, current, ...)
13: paste0("Component ", if (use.names && nt[i] == nc[i]) dQuote(nt[i]) else i, ": ", mi)
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

══ Results ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
Duration: 0.8 s

OK:       2
Failed:   1
Warnings: 0
Skipped:  0

Если я правильно прочитал ошибку, ошибка возникает в функции expect_known_value(), а не в функции validate(), что имеет смысл, так как эта функция работает (если я поставлю ее после присвоения x <-, она будет успешно выполнена и возвращает результаты.

Я знаю, что это трудно без воспроизводимого примера, но есть идеи, что происходит?

...