Actix Actor Expect Continuous Integration cargo-badge license-badge

Utility for unit testing actix actors, extension for Mocker. I wrote a blog post Mocking Actix Actor without getting a gray hair a while ago, you might find it useful.

Usage

Dependencies:

toml [dev-dependencies] actix-actor-expect = "0.1.0-beta.4"

Code: ```rust

[derive(Clone, Debug, PartialEq, Message)]

[rtype(result = "Result")]

pub enum TestActorCommand { Hello, Dunno, Echo(String), }

[derive(Debug, Default)]

pub struct TestActor {}

impl Actor for TestActor { type Context = Context; }

impl Handler for TestActor { type Result = Result;

fn handle(&mut self, msg: TestActorCommand, _ctx: &mut Self::Context) -> Self::Result {
    match msg {
        TestActorCommand::Echo(message) => Ok(message),
        rest => Ok(format!("{:?}", rest)),
    }
}

}

[actix::test]

async fn sendshelloback() { let actorexpect = ActorExpect::::expectsend( TestActorCommand::Echo("Message".tostring()), "Message".tostring(), None, ); let actor = &actor_expect.addr;

let _ = actor
    .send(TestActorCommand::Echo("Message".to_string()))
    .await
    .expect("Not able to process Echo");
let _ = actor
    .send(TestActorCommand::Hello)
    .await
    .expect("Not able to process Hello");
let _ = actor
    .send(TestActorCommand::Dunno)
    .await
    .expect("Not able to process Dunno");

assert_eq!(actor_expect.total_calls(), 3_usize);
assert_eq!(
    actor_expect.calls_of_variant(TestActorCommand::Echo("Message".to_string())),
    1_usize
);

} ```

Also take a look at tests.

License

Distributed under the terms of MIT license and Apache license.