经过多次实验,以下程序对我有用:
- 我已经开始了一个新项目并加载了 R Markdown 模板“交互式教程”并将其命名为“01-Exercises”。RStudio 生成了一个这个名称的文件夹,并将我的“01-Exercises.Rmd”放在这个文件夹中。
- 我已将该行添加
tutorial_options(exercise.checker =
checkr::check_for_learnr)
到我的“01-Exercises.Rmd”文件的设置块中。
- 我添加了一个带有标签的新 R 块
two-and-two-check
。(= 与学生任务的块名称相同,但添加了-check
.)
- 在这个 R 块中,我只添加了一行
check_two_and_two(USER_CODE)
,它将成为我的测试函数。
- 我
check_two_and_two
在一个额外的脚本文件“check_test.R”中编写了一个测试函数,并保存在一个文件夹“www”下。
- 我已经将此脚本源到内存中的函数中。我
rmarkdown::run("01-Exercises/01-Exercises.Rmd")
从控制台跑了。
这是我的测试功能:
check_two_and_two <- function(USER_CODE) {
code <- for_checkr(USER_CODE)
t1 <- line_where(code, insist(all(F == "+"), "Your operator is {{F}}. This is not the assigned task."))
if (failed(t1)) return(t1)
t2 <- line_where(code, insist(all(V == 4), "Your solution is {{V}}. This is not the result (= 4) asked for."))
if (failed(t2)) return(t2)
line_binding(code, 2 + 2, failif(FALSE, "The pattern did not match."), message = "The result is correct, but I was looking for 2 + 2.")
}
即使这对我有用:也许有更好(更有效)的解决方案?