如何使用 testthat 测试失败后 运行 编码?
How to run code after test failure with testthat?
这是我的测试文件:
## test-foo_files.R
## Setup
dir.create("temp")
file.create("temp/file1.R")
file.create("temp/file2.R")
## test
test_that("List all R files works", {
expect_equal(list_R_scripts("temp"), c("file1.R", "file2.R"))
})
## Cleaning
unlink("temp")
如何使清洁部分运行即使测试失败?
你可以使用 on.exit
:
## test-foo_files.R
## Setup
temp <- tempdir()
## Triggered cleaning
on.exit(unlink(temp))
file.create("file1.R")
file.create("file2.R")
## test
test_that("List all R files works", {
expect_equal(list_R_scripts("temp"), c("file1.R", "file2.R"))
})
@Waldi 的回答是正确的,但多亏了他,经过一些研究,我找到了一种更简洁的方法。
它被称为 fixtures
(参见 here)并与包 withr
一起工作。
withr::defer()
解决了 on.exit()
函数的一些缺点。
一个干净的设计来组织所有这些,就是使用 setup-xxx.R
这样的文件:
## tests/testthat/setup-dir-with-2-files.R
fs::dir_create("temp")
fs::file.create(paste0("temp/", c("file1.R", "file2.R"))
withr::defer(fs::dir_delete("temp"), teardown_env())
测试文件现在是:
## tests/testthat/test_list_r_scripts.R
test_that("List all R files works", {
expect_equal(list_R_scripts("temp"), c("file1.R", "file2.R"))
})
这是我的测试文件:
## test-foo_files.R
## Setup
dir.create("temp")
file.create("temp/file1.R")
file.create("temp/file2.R")
## test
test_that("List all R files works", {
expect_equal(list_R_scripts("temp"), c("file1.R", "file2.R"))
})
## Cleaning
unlink("temp")
如何使清洁部分运行即使测试失败?
你可以使用 on.exit
:
## test-foo_files.R
## Setup
temp <- tempdir()
## Triggered cleaning
on.exit(unlink(temp))
file.create("file1.R")
file.create("file2.R")
## test
test_that("List all R files works", {
expect_equal(list_R_scripts("temp"), c("file1.R", "file2.R"))
})
@Waldi 的回答是正确的,但多亏了他,经过一些研究,我找到了一种更简洁的方法。
它被称为 fixtures
(参见 here)并与包 withr
一起工作。
withr::defer()
解决了 on.exit()
函数的一些缺点。
一个干净的设计来组织所有这些,就是使用 setup-xxx.R
这样的文件:
## tests/testthat/setup-dir-with-2-files.R
fs::dir_create("temp")
fs::file.create(paste0("temp/", c("file1.R", "file2.R"))
withr::defer(fs::dir_delete("temp"), teardown_env())
测试文件现在是:
## tests/testthat/test_list_r_scripts.R
test_that("List all R files works", {
expect_equal(list_R_scripts("temp"), c("file1.R", "file2.R"))
})