[solved] Running actix-web *client* in tests

I'm using actix_web::client to make (not serve) an HTTP request. I'd like to use it to make requests in #[test] and read the result. For reasons, it's also wrapped in impl Future<Item=ClientResponse>.

What's the right way to wait for it?

  • future.wait() seems to block forever (deadlock?)
  • tokio::runtime::Runtime::block_on() requires Send, but the ClientResponse is not Send.
    use std::thread;
    use std::sync::mpsc;
    use self::tokio::runtime::current_thread;

    struct TestContext {
        rt: current_thread::Runtime,

    impl TestContext {
        pub fn new() -> Self {
            let (tx, rx) = mpsc::channel();

            // run server in separate thread
            thread::spawn(move || {

                let sys = System::new("test");



            let system = rx.recv().unwrap();

            Self {
                rt: current_thread::Runtime::new().unwrap()

        pub fn block_on<F: Future>(&mut self, future: F) -> Result<F::Item, F::Error> {

    impl Drop for TestContext {
        fn drop(&mut self) {
1 Like