Rob Taft <rrt...@gmail.com> added the comment:

I updated the test with 2 cases and the traceback is different for each when I 
expected them to be the same if this was purely a mock issue, the line throwing 
the error is the same.  I can post this over with flask and see what they think.

from unittest.mock import patch

import flask

def some_function():
    flask.g.somevariable = True
    return flask.g.somevariable

@patch('flask.g')
def test_patch(mock_flask_global):
    assert some_function()

def test_no_patch():
    assert some_function()


$ pytest -vv temp_test.py 
============================================================================================================
 test session starts 
=============================================================================================================
platform linux -- Python 3.8.3, pytest-5.4.3, py-1.8.1, pluggy-0.13.1 -- 
collected 2 items                                                               
                                                                                
                                                                             

temp_test.py::test_patch FAILED                                                 
                                                                                
                                                                       [ 50%]
temp_test.py::test_no_patch FAILED                                              
                                                                                
                                                                       [100%]

==================================================================================================================
 FAILURES 
==================================================================================================================
_________________________________________________________________________________________________________________
 test_patch 
_________________________________________________________________________________________________________________

args = (), keywargs = {}

    @wraps(func)
    def patched(*args, **keywargs):
>       with self.decoration_helper(patched,
                                    args,
                                    keywargs) as (newargs, newkeywargs):

../../../.pyenv/versions/3.8.3/lib/python3.8/unittest/mock.py:1322: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
../../../.pyenv/versions/3.8.3/lib/python3.8/contextlib.py:113: in __enter__
    return next(self.gen)
../../../.pyenv/versions/3.8.3/lib/python3.8/unittest/mock.py:1304: in 
decoration_helper
    arg = exit_stack.enter_context(patching)
../../../.pyenv/versions/3.8.3/lib/python3.8/contextlib.py:425: in enter_context
    result = _cm_type.__enter__(cm)
../../../.pyenv/versions/3.8.3/lib/python3.8/unittest/mock.py:1416: in __enter__
    if spec is None and _is_async_obj(original):
../../../.pyenv/versions/3.8.3/lib/python3.8/unittest/mock.py:51: in 
_is_async_obj
    if hasattr(obj, '__func__'):
pyvenv/lib/python3.8/site-packages/werkzeug/local.py:347: in __getattr__
    return getattr(self._get_current_object(), name)
pyvenv/lib/python3.8/site-packages/werkzeug/local.py:306: in _get_current_object
    return self.__local()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

name = 'g'

    def _lookup_app_object(name):
        top = _app_ctx_stack.top
        if top is None:
>           raise RuntimeError(_app_ctx_err_msg)
E           RuntimeError: Working outside of application context.
E           
E           This typically means that you attempted to use functionality that 
needed
E           to interface with the current application object in some way. To 
solve
E           this, set up an application context with app.app_context().  See the
E           documentation for more information.

pyvenv/lib/python3.8/site-packages/flask/globals.py:45: RuntimeError
_______________________________________________________________________________________________________________
 test_no_patch 
________________________________________________________________________________________________________________

    def test_no_patch():
>       assert some_function()

temp_test.py:14: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
temp_test.py:6: in some_function
    flask.g.somevariable = True
pyvenv/lib/python3.8/site-packages/werkzeug/local.py:364: in <lambda>
    __setattr__ = lambda x, n, v: setattr(x._get_current_object(), n, v)
pyvenv/lib/python3.8/site-packages/werkzeug/local.py:306: in _get_current_object
    return self.__local()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

name = 'g'

    def _lookup_app_object(name):
        top = _app_ctx_stack.top
        if top is None:
>           raise RuntimeError(_app_ctx_err_msg)
E           RuntimeError: Working outside of application context.
E           
E           This typically means that you attempted to use functionality that 
needed
E           to interface with the current application object in some way. To 
solve
E           this, set up an application context with app.app_context().  See the
E           documentation for more information.

pyvenv/lib/python3.8/site-packages/flask/globals.py:45: RuntimeError

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue40805>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to