Question

I have a function that will set up some folders for the rest of my workflow

library(testthat)

analysisFolderCreation<-function(projectTitle=NULL,Dated=FALSE,destPath=getwd(),SETWD=FALSE){
  stopifnot(length(projectTitle)>0,is.character(projectTitle),is.logical(Dated),is.logical(SETWD))

  # scrub any characters that might cause trouble
  projectTitle<-gsub("[[:space:]]|[[:punct:]]","",projectTitle)

  rootFolder<-file.path(destPath,projectTitle)
  executionFolder<-file.path(rootFolder,if (Dated) format(Sys.Date(),"%Y%m%d"))

  subfolders<-c("rawdata","intermediates","reuse","log","scripts","results")

  dir.create(path=executionFolder, recursive=TRUE)
  sapply(file.path(executionFolder,subfolders),dir.create)
  if(Setwd) setwd(executionFolder)

}

I am trying to unit test it and my error tests work fine:

test_that("analysisFolderCreation: Given incorrect inputs, error is thrown",
{
  # scenario: No arguments provided
  expect_that(analysisFolderCreation(),throws_error())
})

But my tests for success, do not...

 test_that("analysisFolderCreation: Given correct inputs the function performs correctly",
 {
   # scenario: One argument provided - new project name
   analysisFolderCreation(projectTitle="unittest")
   expect_that(file.exists(file.path(getwd(),"unittest","log")),
               is_true())
 }

Errors with

  1. Error: analysisFolderCreation: Given correct inputs the function performs correctly --------------------------------------------------------------- could not find function "analysisFolderCreation"

As I am checking for a folder's existence, I'm unsure how to go about testing this in an expectation format that includes the function analysisFolderCreation actually inside it.

I am running in dev_mode() and executing the test file explicitly with test_file()

Is anyone able to provide a way of rewriting the test to work, or provide an existence checking expectation?

Was it helpful?

Solution

The problem appeared to be the use of test_file(). Using test() over the whole suite of unit tests does not require the function already be created in the workspace unlike test_file().

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top