racetrack

Crates.ioracetrack
lib.rsracetrack
version0.0.2
sourcesrc
created_at2020-03-05 16:25:00.301411
updated_at2020-03-05 16:28:42.877488
descriptionA library for writing assertions on methods, function and closure calls.
homepage
repositoryhttps://github.com/wingertge/racetrack
max_upload_size
id215750
size17,756
Genna Wingert (wingertge)

documentation

README

racetrack

A library for writing assertions on methods, function and closure calls.

Racetrack allows for tracking direct and indirect calls to methods. It's inspired by Jest's fn() and spyOn. The library consists of the tracker, which handles assertions, as well as a proc-macro that allows for automatic tracking injection into methods.

Usage

The intended usage is with the proc macro.

use racetrack::{Tracker, track_with};

struct TrackedStruct(Arc<Tracker>);

#[track_with(0)]
impl TrackedStruct {
    fn tracked_fn(&self, arg: String) {}
}

let tracker = Tracker::new();
let tracked = TrackedStruct(tracker.clone());
tracked.tracked_fn("Test".to_string());

tracker
    .assert_that("TrackedStruct::tracked_fn")
    .was_called_once()
    .with(("Test".to_string()));

However, this has some caviats. All arguments and the return type must implement ToOwned and it may not work if you have very specific requirements. So, alternatively, you can use the tracker manually:

use racetrack::{Tracker, CallInfo};

struct TrackedStruct(Arc<Tracker>);

impl TrackedStruct {
    fn tracked_fn(&self, arg: String) {
        let call_info = CallInfo {
            arguments: Some(Box::new(arg)),
            returned: None
        };
        self.0.log_call("my_fn", call_info);
    }
}

let tracker = Tracker::new();
let tracked = TrackedStruct(tracker.clone());
tracked.tracked_fn("Test".to_string());

tracker
    .assert_that("my_fn")
    .was_called_once()
    .with("Test".to_string());

License: Apache-2.0

Commit count: 6

cargo fmt