Test code blocks in your READMEs
Project description
Test code blocks in your READMEs.
This is pytest-codeblocks, a pytest plugin for testing code blocks from README files. It supports Python and shell code.
Install with
pip install pytest-codeblocks
and run pytest with
pytest --codeblocks
================================= test session starts =================================
platform linux -- Python 3.9.4, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
rootdir: /path/to/directory
plugins: codeblocks-0.11.0
collected 56 items
example.md ....................... [ 50%]
README.md ....................... [100%]
================================= 56 passed in 0.08s ==================================
pytest-codeblocks will only pick up code blocks with python
and sh
/bash
/zsh
syntax highlighting.
Marking code blocks
It is possible to use pytest.mark
for marking code blocks. For example,
to skip a code block use pytest.mark.skip
or pytest.mark.skipif
:
Lorem ipsum
<!--pytest.mark.skip-->
```python
foo + bar # not working
```
dolor sit amet.
<!--pytest.mark.skipif(sys.version_info <= (3, 7), reason="Need at least Python 3.8")-->
You can skip code blocks on import errors with
<!--pytest-codeblocks:importorskip(sympy)-->
Skip the entire file by putting
<!--pytest-codeblocks:skipfile-->
in the first line.
For expected errors, use pytest.mark.xfail
:
The following gives an error:
<!--pytest.mark.xfail-->
```python
1 / 0
```
Merging code blocks
Broken-up code blocks can be merged into one with the pytest-codeblocks:cont
prefix
Lorem ipsum
```python
a = 1
```
dolor sit amet
<!--pytest-codeblocks:cont-->
```python
# this would otherwise fail since `a` is not defined
a + 1
```
If you'd like to prepend code that you don't want to show, you can just comment it out; pytest-codeblocks will pick it up anyway:
Lorem ipsum
<!--
```python
a = 1
```
-->
dolor sit amet
<!--pytest-codeblocks:cont-->
```python
# this would otherwise fail since `a` is not defined
a + 1
```
Expected output
You can also define the expected output of a code block:
This
```sh
print(1 + 3)
```
gives
<!--pytest-codeblocks:expected-output-->
```
4
```
Use expected-output-ignore-whitespace
if you'd like whitespace differences to
be ignored.
(Conditionally) Skipping the output verfication works by prepending the first
block with skip
/skipif
(see above).
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file pytest_codeblocks-0.17.0.tar.gz
.
File metadata
- Download URL: pytest_codeblocks-0.17.0.tar.gz
- Upload date:
- Size: 11.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.31.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 446e1babd182f54b4f113d567737a22f5405cade144c08a0085b2985247943d5 |
|
MD5 | 541476d994c58528ea1116e907539a9b |
|
BLAKE2b-256 | a5991ee3017a525dcb36566f0523938fbc20fb33ef8bf957205fafe6659f3a60 |
File details
Details for the file pytest_codeblocks-0.17.0-py3-none-any.whl
.
File metadata
- Download URL: pytest_codeblocks-0.17.0-py3-none-any.whl
- Upload date:
- Size: 7.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.31.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b2aed8e66c3ce65435630783b391e7c7ae46f80b8220d3fa1bb7c689b36e78ad |
|
MD5 | a5a5daf60f3a540eea2c598a4a6bd271 |
|
BLAKE2b-256 | fa2c503f797c7ac1e35d81944f8fbcf3ea7a1965e435676570a833035d8d0937 |