How to mock .query.filter_by() in Flask-SqlAlchemy

后端 未结 2 1318
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-30 05:45

In brief

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

2条回答
  •  长情又很酷
    2020-12-30 06:07

    Just a sum-up from Martijn Pieters answer

    Target

    • We want to mock .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)
    

提交回复
热议问题