我想在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()
,r
,rmarkdown
,testthat
,expect_equal
的不同组合进行搜索无法有效解决问题。< / p>
你能重现这种意想不到的行为吗?
任何建议,如何在"stop on error"
中使用函数expect_equal
并获取最终输出(如果此行为不是函数rmarkdown
本身中的错误的结果)?
我的expect_equal
:
sessionInfo()
答案 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))
```