2017-10-15 5 views
0

Je suis en train de tester la méthode suivante avec le pytest asyncio plugin:python test asyncio coroutine avec le plugin pytest-asyncio soulève TypeError

class Controller(object): 

    async def get_item(self, item_id): 
     item = await self.item_collection.find_one({'item_id': item_id}) 
     return item 

Et j'ai écrit le test suivant:

class TestController(object): 

    @pytest.mark.asyncio 
    async def test_get_item(self): 

     controller = Controller() 
     item = await controller.get_item('item-1') 
     assert item.get('item_id') == 'item-1' 

Ce test soulève l'erreur suivante:

item = await self.item_collection.find_one({'item_id': item_id}) 
    TypeError: object dict can't be used in 'await' expression 

Si je supprime l'item = await self.item_collection.find_one({'item_id': item_id}) vous attendent dans le test p ânes, mais comment puis-je tester cette méthode telle qu'elle est?

+0

Vous vous moquez de 'find_one'? – dirn

+0

Salut @dirn, j'utilise le plugin pyest-mongodb avec des fixations json, qui à son tour utilise MongoMock. La collection mongo mockée fonctionne comme prévu, désolé d'avoir laissé tomber ça. –

+1

Il ne semble pas que MongoMock comprenne l'asyncio. Il définit une collection qui a des méthodes régulières, pas des coroutines. Quel pilote utilisez-vous? Moteur? Vous aurez probablement besoin soit de chercher une bibliothèque qui peut se moquer de cela ou gérer vous-même. – dirn

Répondre