我有 R 代码(不是包),我想用 testthat 来覆盖验收测试,输出在 Jenkins 中使用。

我可以从演示代码结构的两个文件开始:

# -- test.R
source("test-mulitplication.R")

# -- test-mulitplication.R
library(testthat)
test_that("Multipilation works ", {
  res <- 5 * 2
  expect_equal(res, 10)
})

运行后,我想获得一个 xml 文件,其中包含每个测试文件的结果或单个文件中的所有测试。

我注意到 testthat 中有一个 reporter 功能,但其中大部分似乎是包内部的。目前尚不清楚如何保存测试结果以及功能的灵活性。

不幸的是,该部分的文档不完整。

编辑

我现在找到了一种使用更好的语法和 junit 输出选项来测试目录的方法:
# -- tests/accpetance-tests.R
options(testthat.junit.output_file = "test-out.xml")
test_dir("tests/")

# -- tests/test-mulitplication.R
library(testthat)
test_that("Multipilation works ", {
  res <- 5 * 2
  expect_equal(res, 10)
})

我相信这会在报告器中生成一个 XML 对象,但我仍然不知道如何将其保存到文件中。

我试图用 test_dir 包装 with_reporter 调用,但这并没有多大作用。

最佳答案

2019 年更新:

2.1.0 版测试不再需要 context 才能正常工作。因此,我希望您的原始代码中的问题能够正常工作。

资料来源:https://www.tidyverse.org/articles/2019/04/testthat-2-1-0/

原始答案:

testthat commit 4 days ago 引用了这个功能。 testthat 的开发版本中引入了一个新选项。

如果你运行:

devtools::install_github("r-lib/testthat")
options(testthat.output_file = "test-out.xml")
test_dir("tests/")

这应该会在您的工作目录中生成一个文件。

问题是它可能不适用于您想要的记者。安装了测试的 devtools 版本:
options(testthat.output_file = "test-out.xml")
test_dir("tests/", reporter = "junit")

产生关于 xml2 的错误。尝试 xml2 的 dev 分支没有解决问题。鉴于此更改是最近发生的,因此可能值得 filing an issue over on github.

不确定这是否让您更接近,但我们正在收到一份输出报告,这是一个开始!

编辑

这有效,但您需要确保并在测试顶部添加“上下文”,否则您将收到错误消息。尝试将乘法测试的顶部更改为:
# -- test-mulitplication.R
library(testthat)
context("Testing Succeeded!")
test_that("Multipilation works ", {
  res <- 5 * 2
  expect_equal(res, 10)
})

context("Test Failed!")
test_that("Multipilation works ", {
  res <- 5 * 2
  expect_equal(res, 12)
})

然后重新运行:
options(testthat.output_file = "test-out.xml")
test_dir("tests/", reporter = "junit")

这对我有用!由于某种原因,不包含上下文 header 会导致问题。不过,这可能是设计使然。

关于r - 如何使用 R testthat 生成 jUnit fie,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46655071/

10-12 17:22