Unmaintained: Following temporary directory fixture changes in pytest, I made a successor library, pytest-flake8-path. I recommend you use that instead.
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"
]
Use pip:
python -m pip install pytest-flake8dir
Python 3.6 to 3.10 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.
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.
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
""",
)
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
"""
)
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
"""
)
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
""",
)
Runs flake8 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 flake8
runs in an isolated manner - see source.
Represents the parsed output of a flake8 run.
The full string of output (stdout) generated by flake8.
The full string of error output (stderr) generated by flake8.
The exit code that the flake8 run exited with.
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
Like out_lines
, but for error output.