我有 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/