test-span 0.1.1

macro and utilities to do snapshot tests on tracing spans
Documentation

test-span

A macro and utilities to do snapshot tests on tracing spans.

How to use

Refer to the tests for a more exhaustive list of features and behaviors:

    use test_span::prelude::*;

    #[test_span]
    fn a_test() {
        do_something();

        // test_span provides your with three functions:
        let spans = get_spans();
        let logs = get_logs();
        // you can get both in one call
        let (spans, logs) = get_telemetry();

        // This plays well with insta snapshots:
        insta::assert_json_snapshot!(logs);
        insta::assert_json_snapshot!(spans);
    }

    // Test span plays well with async
    #[test_span(tokio::test)]
    // you can specify the span / log level you would like to track like this:
    #[level(tracing::Level::INFO)]
    async fn an_sync_test() {
        do_something_async().await;
        // You still get access to each function
        let spans = get_spans();
        let logs = get_logs();
        let (spans, logs) = get_telemetry();
    }

Limitations

Spans and logs are hard to track across thread spawns. However we're providing you with a log dump you can check:

#[test_span]
    fn track_across_threads() {
        std::thread::spawn(|| {
            tracing::info!("will only show up in get_all_logs!");
        })
        .join()
        .unwrap();

        // get_all_logs takes a filter Level
        let all_logs = test_span::get_all_logs(&tracing::Level::INFO);
        assert!(all_logs.contains_message("will only show up in get_all_logs!"));
    }

Contributing

More information can be found in the contribution docs

License