如何让expect_equal()函数(包testthat)与rmarkdown文件一起使用?

时间:2016-10-05 11:36:27

标签: r r-markdown testthat

我想在expect_equal()文件中使用包testthat中的函数rmarkdown,但执行渲染(以{{1}中的Knit按钮启动暂停,没有输出。

文件RStudio中提供了一个最小的例子:

error.Rmd

在第二个块--- title: "error" author: "N" date: "4 października 2016" output: html_document --- ```{r, echo = FALSE} library(testthat) ``` ```{r ex1, error=TRUE} a <- (1:5) a[p] ``` ```{r ex2, error=TRUE} expect_equal(10, 10) expect_equal(10, 10 + 1e-7) expect_equal(10, 11) ``` 中,行ex2应该产生错误,但由于块选项expect_equal(10, 11),不应该停止呈现文件。但是,渲染停止并且不生成输出。

渲染的输出如下:

error=TRUE

波兰语“BŁĄD”表示“ERROR”,“Wykonywanie wstrzymane”表示“执行停止”。

processing file: error.Rmd |......... | 14% ordinary text without R code |................... | 29% label: unnamed-chunk-1 (with options) List of 1 $ echo: logi FALSE |............................ | 43% ordinary text without R code |..................................... | 57% label: ex1 (with options) List of 1 $ error: logi TRUE |.............................................. | 71% ordinary text without R code |........................................................ | 86% label: ex2 (with options) List of 1 $ error: logi TRUE BŁĄD: 10 not equal to 11. 1/1 mismatches [1] 10 - 11 == -1 Wykonywanie wstrzymane 按预期工作:表达式ex1导致错误,错误消息放在输出中并继续呈现。

在块a[p]中,前两个表达式不会产生错误,并且第三个表达式被注释掉,输出被正确呈现。

使用包ex2中的其他函数而不是第三个表达式,例如testthat效果很好,不会停止呈现。

使用all.equal(10,11)testthat中的其他功能,也会停止渲染过程。

使用关键字expect_identical()rrmarkdowntestthatexpect_equal的不同组合进行搜索无法有效解决问题。< / p>

你能重现这种意想不到的行为吗?

任何建议,如何在"stop on error"中使用函数expect_equal并获取最终输出(如果此行为不是函数rmarkdown本身中的错误的结果)?

我的expect_equal

sessionInfo()

1 个答案:

答案 0 :(得分:3)

您可以在test_that()表达式周围包裹expect_equal()

---
title: "error"
author: "N"
date: "4 października 2016"
output: html_document
---

```{r, echo = FALSE}
library(testthat)
```

```{r ex1, error=TRUE}
a <- (1:5)
a[p]
```

```{r ex2, error=TRUE}
test_that(desc = 1, expect_equal(10, 10))
test_that(desc = 2, expect_equal(10, 10 + 1e-7))
test_that(desc = 3, expect_equal(10, 11))
```

enter image description here