A pytest fixture for testing flake8 plugins.
Project description
A pytest fixture for testing flake8 plugins.
A quick example:
def test_simple_run(flake8dir):
flake8dir.make_example_py('''
x = 1
''')
result = flake8dir.run_flake8()
assert result.out_lines == [
'./example.py:1:2: E221 multiple spaces before operator'
]
Installation
Use pip:
python -m pip install pytest-flake8dir
Python 3.6 to 3.9 supported.
Working on a Django project? Check out my book Speed Up Your Django Tests which covers loads of best practices so you can write faster, more accurate tests.
API
flake8dir fixture
A pytest fixture that wraps Pytest’s built-in tmpdir fixture (docs), to create a temporary directory, allow adding files, and running flake8.
If you’re using this to test a flake8 plugin, make sure flake8 is picking up your plugin during tests. Normally this is done with a setup.py entrypoint, which makes tox the easiest way to guarantee this is ready as it will run setup.py install on your project before running tests.
flake8dir.make_py_files(**kwargs: Mapping[str, str])
Creates one python file for each passed keyword argument, with name corresponding to the keyword argument + ‘.py’, and content according the string value of the argument. The value will be processed with textwrap.dedent() so mixed indentation is not a problem in your test files.
For example, this creates two python files in the temporary directory, called example1.py and example2.py, each containing one line with an assignment:
def test_sample(flake8dir):
flake8dir.make_py_files(
example1='''
x = 1
''',
example2='''
y = 1
'''
)
flake8dir.make_example_py(content: str)
A shortcut for make_py_files(example=content), for when you are using a single file over and over. This creates just example.py, which is often all you need for testing a rule.
For example:
def test_sample(flake8dir):
flake8dir.make_example_py('''
x = 1
''')
flake8dir.make_setup_cfg(contents: str)
Makes the file setup.cfg in the test directory with contents equal to the string passed in. This is again processed with textwrap.dedent() so indentation is not a worry. You’ll probably want to set the [flake8] section header to configure flake8.
For example, this makes flake8 ignore rule E101:
def test_sample(flake8dir):
flake8dir.make_setup_cfg('''
[flake8]
ignore = E101
''')
flake8dir.make_file(filename: str, content: str)
Make an arbitrary file with the given filename - this function is the inner implementation for make_py_files and make_setup_cfg. filename may include directories, like mydir/foo.py, and they will be created. content is subject to the same textwrap.dedent() processing as mentioned above.
For example:
def test_sample(flake8dir):
flake8dir.make_file('myfile/foo.py', '''
x = 1
''')
flake8dir.run_flake8(extra_args: List[str]=None) -> Flake8Result
Runs flake8 in the current process, and returns a Flake8Result representing the results.
extra_args may be a list of extra flags to pass to flake8, for example passing ['--ignore', 'E101'] would achieve the same thing as the above setup.cfg example. Note some arguments are already passed to ensure it runs in the same process without multiprocessing - see source.
Flake8Result
Represents the parsed output of a flake8 run.
Flake8Result.out: str
The full string of output generated by flake8.
Flake8Result.exit_code: int
The exit code that the flake8 run exited with.
Flake8Result.out_lines: List[str]
A list of individual lines of output, without trailing newlines. This is the most useful tool for making assertions against.
For example, given a result you can check for a particular line being output:
result = flake8dir.run_flake8()
expected = './example.py:1:2: E221 multiple spaces before operator'
assert expected in result.out_lines
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
Hashes for pytest_flake8dir-2.3.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f9fc1b0bb4eca57132cec242e613675eb12c0188aa0ebae5571f3c49463e1847 |
|
MD5 | 5c2402d361e5d9cfd2e9b405cfc721b5 |
|
BLAKE2b-256 | 15599b77ad41a69713ffa2b7932977004e510323a04613d9094402f1984d7c11 |