diff --git a/_pytest/config.py b/_pytest/config.py index 2a121581148..5b4654a249a 100644 --- a/_pytest/config.py +++ b/_pytest/config.py @@ -379,6 +379,8 @@ def consider_env(self): def consider_module(self, mod): plugins = getattr(mod, 'pytest_plugins', []) + if isinstance(plugins, str): + plugins = [plugins] self.rewrite_hook.mark_rewrite(*plugins) self._import_plugin_specs(plugins) diff --git a/testing/test_assertion.py b/testing/test_assertion.py index a3a29a76cb3..37a303bb3ae 100644 --- a/testing/test_assertion.py +++ b/testing/test_assertion.py @@ -84,6 +84,29 @@ def test_foo(check_first): assert 0 result.stdout.fnmatch_lines([expected]) + @pytest.mark.parametrize('mode', ['str', 'list']) + def test_pytest_plugins_rewrite_module_names(self, testdir, mode): + """Test that pluginmanager correct marks pytest_plugins variables + for assertion rewriting if they are defined as plain strings or + list of strings (#1888). + """ + plugins = '"ham"' if mode == 'str' else '["ham"]' + contents = { + 'conftest.py': """ + pytest_plugins = {plugins} + """.format(plugins=plugins), + 'ham.py': """ + import pytest + """, + 'test_foo.py': """ + def test_foo(pytestconfig): + assert 'ham' in pytestconfig.pluginmanager.rewrite_hook._must_rewrite + """, + } + testdir.makepyfile(**contents) + result = testdir.runpytest_subprocess('--assert=rewrite') + assert result.ret == 0 + @pytest.mark.parametrize('mode', ['plain', 'rewrite']) def test_installed_plugin_rewrite(self, testdir, mode): # Make sure the hook is installed early enough so that plugins