Dynamic fixture creation for your tests
Project description
python-fixturify-project
Dynamic fixture creation for your tests
A Python port of node-fixturify-project
Installation
pip install -U python-fixturify-project
or install with Poetry
poetry add python-fixturify-project --dev
Usage
python-fixturify-project
is a Python package that provides a way to create dynamic fixtures for your tests. Fixtures are real directories and files, written to a temporary directory.
from python_fixturify_project import Project
dir_json = {
"valid_file.txt": "some text",
"nested_dir": {
"valid_empty_file.txt": "",
"another_nested_empty_dir": {},
"another_nested_dir": {
"last_nested_empty_dir": {},
"final_text_file.txt": "some text",
},
},
}
# create a new project with the given directory structure
project = Project(files=dir_json)
# add new files to the project, merging with the existing directory structure
p.write({
"new_file.txt": "some text"
})
# read the actual contents on disc
actual_dir_json = p.read()
Ignore Files
By default, the read()
function will ignore all hidden files and directories in your Project file structure. This can be overridden by using the ignore_patterns
constructor argument, which
takes a list of glob pattern strings. Any patterns provided to the ignore_patterns
argument will be used in an exclusive manner. For example:
files = {
".git": {
"a_nested_dir": {}
},
".github": {
"ignore_me": {},
"do_not_ignore_me": {
"a_file": "some text"
}
},
"ignore_me": "some text",
"do_not_ignore_me": "some text",
}
# Default ignore_patterns is ["**/.git", "**/.git/**"]
project = Project(ignore_patterns=["**/.git", "**/.git/**", "**/ignore_me"])
project.write(files)
assert project.read() == {
'.github': {
'do_not_ignore_me': {
'a_file': 'some text',
},
},
'do_not_ignore_me': 'some text',
}
Recommended Usage Patterns
python-fixutrify-project
becomes even more useful when combining it with tools like pytest
and something like syrupy
, which uses jest
-like snapshots for testing. The example below combines python-fixturify-project
with pytest
's fixtures, and syrupy
to create a snapshot test.
First, we define a fixture to setup and teardown our Project
instance:
# conftest.py
import pytest
from python_fixturify_project import Project
@pytest.fixture
def project():
project = Project()
yield project
project.dispose()
This fixture uses pytest
's yield
fixture pattern, which allows us to run some code after the test has completed. In this case, we use the dispose()
method to remove the temporary directory created by python-fixturify-project
.
from python_fixturify_project import Project
def test_mutating_project(project, snapshot):
project.write({
"a_file.txt": "some text",
"a_dir": {
"another_file.txt": "some text",
},
"path": {
"to": {
"a_file.py": "# some python code",
},
},
})
mutate_files_for_some_reason(p.base_dir)
# ensure mutations were as expected
assert project.files == snapshot
Or you can use the project.get
method to get the path to a file in the project.
from python_fixturify_project import Project
def test_mutating_project(snapshot):
project.write({
"a_file.txt": "some text",
"a_dir": {
"another_file.txt": "some text",
},
"path": {
"to": {
"a_file.py": "# some python code",
},
},
})
mutate_files_for_some_reason(p.base_dir)
# ensure mutations were as for single file
assert project.get('path/to/a_file.py') == snapshot(name='path/to/a_file.py')
Skip Dispose (for debugging)
If you want to skip the dispose()
call, you can set the FIXTURIFY_SKIP_DISPOSE
environment variable to 1
.
FIXTURIFY_SKIP_DISPOSE=1 pytest
This can be useful if you want to inspect the contents of the temporary directory after the test has completed.
🛡 License
This project is licensed under the terms of the MIT
license. See LICENSE for more details.
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 python_fixturify_project-1.0.0.tar.gz
.
File metadata
- Download URL: python_fixturify_project-1.0.0.tar.gz
- Upload date:
- Size: 8.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.3.1 CPython/3.11.0 Darwin/22.2.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9898a4316957e269ba7666f221bf248b0b096a24f4b2d23a4ba4dd2f7d181406 |
|
MD5 | f6967b94752435bbf8d0b375d2928865 |
|
BLAKE2b-256 | 3df73cbe8027728d43e3f3dd952eab9b5c24160fc648a2df02dbb68589542148 |
File details
Details for the file python_fixturify_project-1.0.0-py3-none-any.whl
.
File metadata
- Download URL: python_fixturify_project-1.0.0-py3-none-any.whl
- Upload date:
- Size: 7.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.3.1 CPython/3.11.0 Darwin/22.2.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 204475d118c3ebe970f996b058224f471f2af6947915ba89b253298d4e0bcc9f |
|
MD5 | deca26b4b96d80e9ef01b14a0cbdaf1a |
|
BLAKE2b-256 | 571c9b7bc1c968d73de9c4ab69af847c348b19d38b90e4d350e1408e85dd70b2 |