1
0
mirror of https://github.com/actix/actix-website synced 2024-11-24 08:43:01 +01:00
actix-website/content/docs/testing.md
2019-06-17 15:39:58 -04:00

3.0 KiB

title menu weight
Testing docs_advanced 210

Testing

Every application should be well tested. Actix provides tools to perform unit and integration tests.

Unit Tests

For unit testing, actix provides a request builder type and a simple handler runner. TestRequest implements a builder-like pattern. You can generate a HttpRequest instance with to_http_request(), or you can run your handler with block_on().

{{< include-example example="testing" file="main.rs" section="unit-tests" >}}

Integration tests

There are several methods for testing your application. Actix provides TestServer, which can be used to run the application with specific handlers in a real http server.

TestServer::get(), TestServer::post(), and TestServer::client() methods can be used to send requests to the test server.

A simple form TestServer can be configured to use a handler. TestServer::new method accepts a configuration function, and the only argument for this function is a test application instance.

Check the api documentation for more information.

{{< include-example example="testing" file="integration_one.rs" section="integration-one" >}}

The other option is to use an application factory. In this case, you need to pass the factory function the same way as you would for real http server configuration.

{{< include-example example="testing" file="integration_two.rs" section="integration-two" >}}

If you need more complex application configuration, use the TestServer::build_with_state() method. For example, you may need to initialize application state or start SyncActor's for diesel interation. This method accepts a closure that constructs the application state, and it runs when the actix system is configured. Thus, you can initialize any additional actors.

{{< include-example example="testing" file="integration_three.rs" section="integration-three" >}}

Stream response tests

If you need to test stream it would be enough to convert a ClientResponse to future and execute it. For example of testing Server Sent Events.

{{< include-example example="testing" file="stream_response.rs" section="stream-response" >}}

WebSocket server tests

It is possible to register a handler with TestApp::handler(), which initiates a web socket connection. TestServer provides the method ws(), which connects to the websocket server and returns ws reader and writer objects. TestServer also provides an execute() method, which runs future objects to completion and returns result of the future computation.

The following example demonstrates how to test a websocket handler:

{{< include-example example="testing" file="websockets.rs" section="web-socket" >}}