Display node ids and the warnings generated by it
The rationale of using node ids is that users can copy/paste it to run a chosen test
This commit is contained in:
+31
-10
@@ -4,27 +4,48 @@ import pytest
|
||||
WARNINGS_SUMMARY_HEADER = 'warnings summary'
|
||||
|
||||
@pytest.fixture
|
||||
def pyfile_with_warnings(testdir):
|
||||
testdir.makepyfile('''
|
||||
import warnings
|
||||
def test_func():
|
||||
warnings.warn(PendingDeprecationWarning("functionality is pending deprecation"))
|
||||
warnings.warn(DeprecationWarning("functionality is deprecated"))
|
||||
''')
|
||||
def pyfile_with_warnings(testdir, request):
|
||||
"""
|
||||
Create a test file which calls a function in a module which generates warnings.
|
||||
"""
|
||||
testdir.syspathinsert()
|
||||
test_name = request.function.__name__
|
||||
module_name = test_name.lstrip('test_') + '_module'
|
||||
testdir.makepyfile(**{
|
||||
module_name: '''
|
||||
import warnings
|
||||
def foo():
|
||||
warnings.warn(PendingDeprecationWarning("functionality is pending deprecation"))
|
||||
warnings.warn(DeprecationWarning("functionality is deprecated"))
|
||||
return 1
|
||||
''',
|
||||
test_name: '''
|
||||
import {module_name}
|
||||
def test_func():
|
||||
assert {module_name}.foo() == 1
|
||||
'''.format(module_name=module_name)
|
||||
})
|
||||
|
||||
|
||||
def test_normal_flow(testdir, pyfile_with_warnings):
|
||||
"""
|
||||
Check that the warnings section is displayed, containing test node ids followed by
|
||||
all warnings generated by that test node.
|
||||
"""
|
||||
result = testdir.runpytest()
|
||||
result.stdout.fnmatch_lines([
|
||||
'*== %s ==*' % WARNINGS_SUMMARY_HEADER,
|
||||
|
||||
'*test_normal_flow.py:3: PendingDeprecationWarning: functionality is pending deprecation',
|
||||
'*test_normal_flow.py::test_func',
|
||||
|
||||
'*normal_flow_module.py:3: PendingDeprecationWarning: functionality is pending deprecation',
|
||||
' warnings.warn(PendingDeprecationWarning("functionality is pending deprecation"))',
|
||||
|
||||
'*test_normal_flow.py:4: DeprecationWarning: functionality is deprecated',
|
||||
'*normal_flow_module.py:4: DeprecationWarning: functionality is deprecated',
|
||||
' warnings.warn(DeprecationWarning("functionality is deprecated"))',
|
||||
'* 1 passed, 2 warnings*',
|
||||
])
|
||||
assert result.stdout.str().count('test_normal_flow.py::test_func') == 1
|
||||
|
||||
|
||||
def test_setup_teardown_warnings(testdir, pyfile_with_warnings):
|
||||
@@ -66,7 +87,7 @@ def test_as_errors(testdir, pyfile_with_warnings, method):
|
||||
result = testdir.runpytest(*args)
|
||||
result.stdout.fnmatch_lines([
|
||||
'E PendingDeprecationWarning: functionality is pending deprecation',
|
||||
'test_as_errors.py:3: PendingDeprecationWarning',
|
||||
'as_errors_module.py:3: PendingDeprecationWarning',
|
||||
'* 1 failed in *',
|
||||
])
|
||||
|
||||
|
||||
Reference in New Issue
Block a user