Testing

Overview

Teaching: 30 min
Exercises: 10 min
Questions
  • How can I use unit testing to ensure the data is in the correct format

Objectives
  • Learn to use test_that functions

Testing

Using testthat to test your functions

One of the advantages of divvying up your entire manuscript into functions, is that you can test that they perform properly.

To do so, we are going to use the package testthat that has been designed to test functions written for packages, but it can be applied to any kind of functions.

Make sure you have testthat installed:

install.packages("testthat")

Let’s start by writing a first test:

## Example of using testthat to check that a function generating a dataset works as expected.
test_that("my first test: correct number of countries",
          expect_equal(length(unique(gather_gdp_data()$country)),
                       length(list.files(path = "data-raw/", pattern="gdp-percapita\\.csv$")))
          )
## Error in test_that("my first test: correct number of countries", expect_equal(length(unique(gather_gdp_data()$country)), : could not find function "test_that"

The tests should be wrapped within the test_that function, you then provide a short sentence that explains the nature of the test. Keep it short and meaningful because it will be shown to you if the test fails, and having a clear message will help you figure out the problem.

I have also found that spending a little bit of time thinking about the message helps me refine the nature of the test and be more careful about what I test.

You can use one of the several functions that testthat provides that tells you what you should expect from your function. The most commonly used ones are expect_equal() and expect_true(). The functions expect_warning() and expect_error() are useful to make sure that your functions produce warnings and errors correctly.

Your turn

Write a test for the get_mean_lifeExp() data, or write additional tests for the gather_gdp_data().

Using Travis CI

Instructor notes

There is not enough time to cover in details how Travis works and use it with the manuscript here. However, I have the manuscript in a different repository https://github.com/fmichonneau/teaching-automation with Travis enabled. I typically demonstrate what it looks like, change something in the data that breaks one of the test and go back a few minutes later to show how the badge changed colors.

Key Points

  • Unittesting helps ensure functions do what we think they should