Time travel to test time dependent code - a port of Ruby's timecop
BEWARE: VERY ALPHA
Package API:
time_fuzz
TimeStackItem
Time
Features supported:
- freeze: freeze time to a specific point
Hope to support soon:
- travel: travel back to a specific point in time, but allow time to continue moving forward from there
- scale: scale time by a given scaling factor that will cause time to move at an accelerated pace
remotes::install_github("ropensci/timefuzz")
library("timefuzz")
library(timefuzz)
library(pendulum)
library(testthat)
book_due()
is a toy function that tells us if a book is due
book_due <- function(due_date = Sys.Date() + 10) {
sys_date() > due_date
}
Given the due date of 2021-01-29 the book is not due
expect_false(book_due()) # FALSE
Create a time_fuzz
object
x <- time_fuzz$new()
x
#> <time_fuzz>
#> date:
Call freez()
, passing the date you want to freeze time to, and then a code block to run
in the context of that frozen time. Here we'll freeze time to today + 450 days
x$freeze(Sys.Date() + 450, {
expect_true(book_due())
})
#> Error: book_due() is not TRUE
#>
#> `actual`: FALSE
#> `expected`: TRUE
book_due()
results in TRUE
now, whereas it was FALSE
above in real time
x <- time_fuzz$new()
## set to today + 450 days
x$freeze(Sys.Date() + 450)
We're in the freezed date. So any time based actions using the [pendulum][] package are now using your frozen time context.
sys_time()
#> [1] "2021-01-19 10:29:39 PST"
call $unfreeze()
to unfreeze
x$unfreeze()
now we're back in current time
sys_time()
#> [1] "2021-01-19 10:29:39 PST"
- Please report any issues or bugs.
- License: MIT
- Get citation information for
timefuzz
in R doingcitation(package = 'timefuzz')
- Please note that this package is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.