Skip to content

Commit

Permalink
πŸ“ Update Testing docs to explain how to handle packages and relative …
Browse files Browse the repository at this point in the history
…imports
  • Loading branch information
tiangolo committed Aug 24, 2022
1 parent 7fc989a commit 0ed2435
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 5 deletions.
14 changes: 12 additions & 2 deletions docs/en/docs/advanced/async-tests.md
Expand Up @@ -26,13 +26,23 @@ The important difference for us is that with HTTPX we are not limited to synchro

## Example

For a simple example, let's consider the following `main.py` module:
For a simple example, let's consider a file structure similar to the one described in [Bigger Applications](../tutorial/bigger-applications.md){.internal-link target=_blank} and [Testing](../tutorial/testing.md){.internal-link target=_blank}:

```
.
β”œβ”€β”€ app
β”‚Β Β  β”œβ”€β”€ __init__.py
β”‚Β Β  β”œβ”€β”€ main.py
β”‚Β Β  └── test_main.py
```

The file `main.py` would have:

```Python
{!../../../docs_src/async_tests/main.py!}
```

The `test_main.py` module that contains the tests for `main.py` could look like this now:
The file `test_main.py` would have the tests for `main.py`, it could look like this now:

```Python
{!../../../docs_src/async_tests/test_main.py!}
Expand Down
38 changes: 35 additions & 3 deletions docs/en/docs/tutorial/testing.md
Expand Up @@ -50,26 +50,58 @@ And your **FastAPI** application might also be composed of several files/modules

### **FastAPI** app file

Let's say you have a file `main.py` with your **FastAPI** app:
Let's say you have a file structure as described in [Bigger Applications](./bigger-applications.md){.internal-link target=_blank}:

```
.
β”œβ”€β”€ app
β”‚Β Β  β”œβ”€β”€ __init__.py
β”‚Β Β  └── main.py
```

In the file `main.py` you have your **FastAPI** app:


```Python
{!../../../docs_src/app_testing/main.py!}
```

### Testing file

Then you could have a file `test_main.py` with your tests, and import your `app` from the `main` module (`main.py`):
Then you could have a file `test_main.py` with your tests. It could live on the same Python package (the same directory with a `__init__.py` file):

```Python
``` hl_lines="5"
.
β”œβ”€β”€ app
β”‚Β Β  β”œβ”€β”€ __init__.py
β”‚Β Β  β”œβ”€β”€ main.py
β”‚Β Β  └── test_main.py
```

Because this file is in the same package, you can use relative imports to import the object `app` from the `main` module (`main.py`):

```Python hl_lines="3"
{!../../../docs_src/app_testing/test_main.py!}
```

...and have the code for the tests just like before.

## Testing: extended example

Now let's extend this example and add more details to see how to test different parts.

### Extended **FastAPI** app file

Let's continue with the same file structure as before:

```
.
β”œβ”€β”€ app
β”‚Β Β  β”œβ”€β”€ __init__.py
β”‚Β Β  β”œβ”€β”€ main.py
β”‚Β Β  └── test_main.py
```

Let's say that now the file `main.py` with your **FastAPI** app has some other **path operations**.

It has a `GET` operation that could return an error.
Expand Down

0 comments on commit 0ed2435

Please sign in to comment.