Mongoengine+MongoMock未按预期返回数据

2024-06-10 20:49:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在测试控制器的响应。当我在gunicorn和testFramework之间运行时,响应是不同的

我的server.py如下所示:

app = Flask(__name__, static_url_path='/pub')
api = Api(app, catch_all_404s=True)

connect('myapp', host='mongomock://localhost')

api.add_resource(IndexController, "/")

if __name__ == '__main__':
    app.run(host='0.0.0.0', debug=debug)

我的IndexController看起来像:

^{pr2}$

User对象:

from mongoengine import *
import datetime

class User(Document):
    name = StringField(max_length=200, required=True, unique=True)
    location = PointField(default=[0,0])

我的IndexControllerTest

class IndexControllerTest(unittest.TestCase):
    """
    This is the default controller Base class which
    sets up the server app and has handy asserts to make
    life easier when testing the controllers
    """

    def setUp(self):
        """
        Set up a global instance of the controller
        """
        self.app = server.app.test_client()

    def tearDown(self):
        conn = get_connection()
        conn.myapp.user.drop()
        #Have to do this because it does not clear the unique index

    def assertGet(self, path, data):
        """
        This will run a GET request and test the output
        """
        response = self.app.get(path)

        #print str(response.get_data())
        #print flask.json.dumps(response.data)

        parsed = flask.json.loads(response.data)
        self.assertEqual(parsed, data)

    def test_get_returns_one_user(self):
        """
        When I call a get I should get Users with thier data
        """

        user = User(name="muse")
        user.save()

        self.assertGet(
            "/",
            [ 
              { 
                "name": "muse", 
                "location": [ 0, 0 ]
              } 
            ],
            status_code=200
        )

通过gunicorn输出,这就是我想要的!公司名称:

[
  {
    "name": "Hello",
    "location": [
      52.201962,
      0.128145
    ]
  },
  {
    "name": "World",
    "location": [
      0,
      0
    ]
  }
]

我的测试输出:

...
First differing element 0:
{u'name': u'muse', u'location': {u'type': u'Point', u'coordinates': [0, 0]}}
{'name': 'muse', 'location': [0, 0]}

- [{u'location': {u'coordinates': [0, 0], u'type': u'Point'}, u'name': u'muse'}]
+ [{'location': [0, 0], 'name': 'muse'}]

什么?为什么?哪里?谁?@英镑($@$%&;£$((疯狂!

我希望flask_restfullAPI在这两种情况下都能确保输出相同


Tags: thepathnameselftrueappdataget
1条回答
网友
1楼 · 发布于 2024-06-10 20:49:23

原来,我的数据库中有以下内容:

{
        "_id" : ObjectId("56f6966f007502d9952babde"),
        "name" : "World",
        "created" : ISODate("2016-03-26T14:02:23.546Z"),
        "location" : [
                50.201962,
                1.128145
        ]
}

但我希望它是(测试是正确的):

^{pr2}$

所以我的测试是正确的,但是,我的数据库反映不好,所以它不会回来如预期。我假设如果数据是错误的,mongoengine会抛出某种错误,但是,很高兴知道它没有。在

相关问题 更多 >