When testing a model class in Flask-SqlAlchemy, how can we mock the method .query.filter_by() so as to return the list of mocked model object
Just a sum-up from Martijn Pieters answer
Target
.query.filter_by().all() result
e.g. SomeModel.query.filter_by().all() Code 01
@patch('flask_sqlalchemy._QueryProperty.__get__')
def test (
self,
queryMOCK,
):
#setup
queryMOCK\
.return_value.filter_by\
.return_value.all\
.return_value = [1,22] #empty list of current product_id
#get actual
modelObj = SomeModel.query.filter_by().all()
print(modelObj)
Code 02 - similar as above and using with
def test(self):
with patch('flask_sqlalchemy._QueryProperty.__get__') as queryMOCK #setup
queryMOCK\
.return_value.filter_by\
.return_value.all\
.return_value = [1,22] #empty list of current product_id
#get actual
modelObj = SomeModel.query.filter_by().all()
print(modelObj)