Skip to content

Commit

Permalink
Fail assert_outcomes() on missing terminal report
Browse files Browse the repository at this point in the history
Currently if the terminal report of testdir.runpytest() is missing,
assert_outcomes() on its output fails because parseoutcomes()
returns an unexpected value (None).
It's better to fail parseoutcomes() directly.
  • Loading branch information
Eli Boyarski committed Jan 11, 2017
1 parent ff309b3 commit e18b2a4
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 0 deletions.
1 change: 1 addition & 0 deletions AUTHORS
Expand Up @@ -141,3 +141,4 @@ Tyler Goodlet
Vasily Kuznetsov
Wouter van Ackooy
Xuecong Liao
Eli Boyarski
4 changes: 4 additions & 0 deletions CHANGELOG.rst
Expand Up @@ -14,11 +14,15 @@
subdirectories with ini configuration files now uses the correct ini file
(`#2148`_). Thanks `@pelme`_.

* Fail ``testdir.runpytest().assert_outcomes()`` explicitly if the pytest
terminal output it relies on is missing. Thanks to `@eli-b`_ for the PR.

*

.. _@lesteve: https://github.com/lesteve
.. _@malinoff: https://github.com/malinoff
.. _@pelme: https://github.com/pelme
.. _@eli-b: https://github.com/eli-b

.. _#2129: https://github.com/pytest-dev/pytest/issues/2129
.. _#2148: https://github.com/pytest-dev/pytest/issues/2148
Expand Down
1 change: 1 addition & 0 deletions _pytest/pytester.py
Expand Up @@ -367,6 +367,7 @@ def parseoutcomes(self):
for num, cat in outcomes:
d[cat] = int(num)
return d
raise ValueError("Pytest terminal report not found")

def assert_outcomes(self, passed=0, skipped=0, failed=0):
""" assert that the specified outcomes appear with the respective
Expand Down
7 changes: 7 additions & 0 deletions testing/test_pytester.py
Expand Up @@ -124,3 +124,10 @@ def test_inline_run_clean_modules(testdir):
test_mod.write("def test_foo(): assert False")
result2 = testdir.inline_run(str(test_mod))
assert result2.ret == EXIT_TESTSFAILED

def test_assert_outcomes_after_pytest_erro(testdir):
testdir.makepyfile("def test_foo(): assert True")

result = testdir.runpytest('--unexpected-argument')
with pytest.raises(ValueError, message="Pytest terminal report not found"):
result.assert_outcomes(passed=0)

0 comments on commit e18b2a4

Please sign in to comment.