docs/developer_guide/testing.md
Tests check if your code does what it's supposed to do. Every time you change something, you need to verify it still works. Instead of manually checking everything, you can write test code once and rerun it after each change.
Here's a simple example:
def sum(a, b):
return a + b
def test_sum():
assert sum(2, 3) == 5
assert sum(-1, 1) == 0
assert sum(0, 0) == 0
If you change something in sum, you can run test_sum again to see if it's still working.
All of the tests of RenderCV are written in tests/ directory.
pytest: Testing Frameworkpytest is a Python library that provides utilities to write and run tests.
How does it work? When you run pytest, it searches for files matching test_*.py in the tests/ directory and executes all functions starting with test_.
Whenever you make changes to RenderCV's source code, run the tests to ensure everything still works. If all tests pass, your changes didn't break anything.
just test
Some tests in tests/renderer/ (specifically test_pdf_png.py, test_typst.py, test_markdown.py, and test_html.py) use reference file comparison:
tests/renderer/testdata/You fix a bug that changes RenderCV's output. Tests fail because the new output doesn't match old reference files.
This is expected. You intentionally changed the output. You need to update the reference files:
just update-testdata
!!! warning Manually verify new reference files before committing. These become the source of truth. If you commit broken reference files, tests will pass even when RenderCV produces bad output. Always check generated PDFs and PNGs carefully.
pytest-cov: Coverage Plugin for pytestCoverage is a measure of which code lines are executed when tests run. If tests execute a line, it's included in coverage. If tests execute all lines in src/rendercv/, coverage is 100%.
Why does it matter? Coverage reports show you which parts of your code aren't tested yet, so you know where to write more tests.
Run tests with coverage:
just test-coverage
This generates two outputs:
htmlcov/index.html to see exactly which lines are covered (green) and which aren't (red)