--- title: "Testing Your Package of Tutorials" author: David Kane output: rmarkdown::html_vignette vignette: > %\VignetteEngine{knitr::knitr} %\VignetteIndexEntry{Testing Your Package of Tutorials} %\VignetteEncoding{UTF-8} --- This vignette demonstrates how to use the **tutorial.helpers** package to "test" the tutorials in your package. I place "test" in quotes because the testing is not very extensive. We are merely ensuring that your tutorials can be knitted without error. I *think* that this guarantees that the tutorials will run when students press the "Start Tutorial" button, but I am not certain. This testing certainly does nothing to ensure that the substance of your tutorials is correct. If you are using the [**testthat**](https://testthat.r-lib.org/) framework for testing, the `tests` directory would have a file called `testthat.R` which just contains: ```` library(testthat) library(your.package) test_check("your.packge") ```` Note how the name of **your.package** is not quoted with `library()` but is quoted with `test_check()`. Within the `tests/testthat` directory there will be a variety of testing scripts. Create a file called `test-tutorials.R`. (The file can be named whatever you want, consistent with **testthat** requirements.) It might contain: ```` tut_paths <- tutorial.helpers::return_tutorial_paths("your.package") test_that("All tutorials can be knit without error", { expect_null( tutorial.helpers::knit_tutorials(tut_paths) ) }) test_that("All tutorials have the expected components", { expect_null( tutorial.helpers::check_tutorial_defaults(tut_paths) ) }) ```` The first step in testing the tutorials in your package is to determine the the full paths to all those tutorials. The `return_tutorial_paths()` returns a vector of those paths. The second step is to confirm that all your tutorials knit without error. `knit_tutorials()`, perhaps the most useful function in the entire package, accomplishes this. If a tutorial does not knit, an error is generated and the test fails. The third step is only relevant for tutorial creators who follow [our advice](instructions.html) concerning tutorial construction. In particular, `check_tutorial_defaults()` ensures that, somewhere in each tutorial, you have included the same key components as exist in the "Helpers Tutorial" R Markdown template. `check_tutorial_defaults()` also fails if you do not have `library(learnr)` and `library(tutorial.helpers)` in your tutorial. Both `knit_tutorials()` and `check_tutorial_defaults()` return `NULL`, which is why we use `expect_null()`.