Expand description
Test your iced applications in headless mode.
§Basic Usage
Let’s assume we want to test the classical counter interface.
First, we will want to create a Simulator of our interface:
use iced_test::simulator;
let mut counter = Counter { value: 0 };
let mut ui = simulator(counter.view());Now we can simulate a user interacting with our interface. Let’s use Simulator::click to click
the counter buttons:
let _ = ui.click("+");
let _ = ui.click("+");
let _ = ui.click("-");Simulator::click takes a type implementing the Selector trait. A Selector describes a way to query the widgets of an interface.
In this case, we leverage the Selector implementation of &str, which selects a widget by the text it contains.
We can now process any messages produced by these interactions and then assert that the final value of our counter is
indeed 1!
for message in ui.into_messages() {
counter.update(message);
}
assert_eq!(counter.value, 1);We can even rebuild the interface to make sure the counter displays the proper value with Simulator::find:
let mut ui = simulator(counter.view());
assert!(ui.find("1").is_ok(), "Counter should display 1!");And that’s it! That’s the gist of testing iced applications!
Simulator contains additional operations you can use to simulate more interactions—like tap_key or
typewrite—and even perform snapshot testing!
Re-exports§
pub use emulator::Emulator;pub use ice::Ice;pub use instruction::Instruction;pub use simulator::Simulator;pub use simulator::simulator;pub use iced_program as program;pub use iced_renderer as renderer;pub use iced_runtime as runtime;pub use iced_runtime::core;pub use iced_selector as selector;
Modules§
- emulator
- Run your application in a headless runtime.
- ice
- A shareable, simple format of end-to-end tests.
- instruction
- A step in an end-to-end test.
- simulator
- Run a simulation of your application without side effects.
Enums§
- Error
- A test error.
Traits§
- Selector
- A type that traverses the widget tree to “select” data and produce some output.