| Crates.io | test_executors |
| lib.rs | test_executors |
| version | 0.4.1 |
| created_at | 2024-10-14 19:18:29.840055+00 |
| updated_at | 2025-12-20 22:11:26.970854+00 |
| description | Simple async executors for testing. |
| homepage | https://sealedabstract.com/code/test_executors |
| repository | https://github.com/drewcrawford/test_executors |
| max_upload_size | |
| id | 1408577 |
| size | 155,429 |
This crate provides extremely simple, yet useful, async executors. They are primarily useful for writing unit tests without bringing in a full-blown executor such as tokio.

use test_executors::{spin_on, sleep_on};
// Run a simple async function
let result = spin_on(async {
42
});
assert_eq!(result, 42);
// Run an async function that sleeps
let result = sleep_on(async {
// Your async code here
"Hello, async!"
});
assert_eq!(result, "Hello, async!");
The crate provides three main executors:
spin_on - Polls a future in a busy loop on the current thread. Best for CPU-bound tasks or when latency is critical.sleep_on - Polls a future on the current thread, sleeping between polls. Best for I/O-bound tasks to avoid burning CPU.spawn_on - Spawns a future on a new thread, polling it there. Best for fire-and-forget tasks.All executors work as described above on native platforms (Linux, macOS, Windows, etc.).
This crate has special support for wasm32 targets:
async_test macro automatically adapts to use wasm-bindgen-test on WASMspawn_local uses wasm_bindgen_futures::spawn_local on WASM targetsasync_test MacroThe async_test macro allows you to write async tests that work on both native and WASM targets:
use test_executors::async_test;
#[async_test]
async fn my_test() {
let value = async { 42 }.await;
assert_eq!(value, 42);
}
some_executorThis crate implements the some_executor trait for all executors, allowing them to be used in executor-agnostic code:
use test_executors::aruntime::SpinRuntime;
use some_executor::SomeExecutor;
let mut runtime = SpinRuntime::new();
// Use runtime with some_executor traits
The crate also provides utility functions and types:
poll_once and poll_once_pin - Poll a future exactly oncespawn_local - Platform-aware spawning that works on both native and WASMFor detailed API documentation including all function signatures, examples, and implementation details, see the docs.rs documentation.
Licensed under either of:
at your option.