[−][src]Crate spy
Spy crate is inspired by such famous Javascript testing tools as Jasmine and Sinon.js. It provides easy configurable spies with predefined behaviour.
Spy without arguments
spy!()
creates a pair of a spy function that receives no arguments
and does nothing and corresponded Spy
object.
#[macro_use] extern crate spy; use spy::*; fn main() { let (spy_fn, spy) = spy!(); assert_eq!(spy_fn(), ()); assert_eq!(spy_fn(), ()); // take a snapshot let snapshot = spy.snapshot(); // make assertions assert!( snapshot.called_with(()), "should be called with () at least once" ); assert!( snapshot.each_called_with(()), "should be called with () each time" ); assert_eq!(snapshot.num_of_calls(), 2, "should be called 2 times"); assert_eq!(snapshot.all_calls(), &vec![(), ()]); assert_eq!(snapshot.first_call().expect("should be Some"), &()); assert_eq!(snapshot.last_call().expect("should be Some"), &()); assert_eq!(snapshot.nth_call(1).expect("should be Some"), &()); }
Spy with arguments
If a spy function should receive arguments it can be created in one of following ways:
-
spy!(|n, m|)
creates a spy function that can receive two arguments. Any number of arguments could be passed inside||
. Types of these arguments will be inferred from a spy function usage. This function does nothing and returns()
. -
spy!(|n, m| a + b)
creates a spy function that can receive two arguments followed by a function body but any number of arguments could be requested. This syntax is pretty much the same as Rust closures. Types of arguments and an output will be inferred from a spy function usage. -
spy!(|n: u8, m: u8| -> u8 { return n + m; })
creates spy function with type annotations both for arguments and for an output.
Macros
spy | The macro that creates a pair of a |
Structs
Spy | Spy object that tracks calls of associated spy function. |
SpySnapshot | The structure represents a snapshot of a spy object. Taken snapshot
contains all the calls starting from the moment when |