2
私はポスト引数としてログインとパスワード を受け入れる単純なコルーチンregister
を持っています。 私が持っている問題は、コルーチンをテストする方法がわからないことです。pytestでaiohttpとmongoをテストする
例は、 https://aiohttp.readthedocs.io/en/latest/testing.htmlの例です。
私は自分でテストを書くまで、すべてが簡単だったようです。
test_register.py
from main import make_app
pytest_plugins = 'aiohttp.pytest_plugin'
@pytest.fixture
def cli(loop, test_client):
return loop.run_until_complete(test_client(make_app))
async def test_register(cli):
resp = await cli.post('/register', data={'login': 'emil', 'password': 'qwerty'})
assert resp.status == 200
text = await resp.text()
そしてregister.py
from settings import db
async def register(request):
post_data = await request.post()
print('Gotta: ', post_data)
login, password = post_data['login'], post_data['password']
matches = await db.users.find({'login': login}).count()
...
main.py
from aiohttp import web
from routes import routes
def make_app(loop=None):
app = web.Application(loop=loop)
for route in routes:
app.router.add_route(route.method, route.url, route.handler)
return app
def main():
web.run_app(make_app())
if __name__ == "__main__":
main()
settings.py
そして私はpy.test test_register.py
を実行し、それがあなたの問題の根はグローバル変数の使用あるデータベース操作 matches = await db.users.find({'login': login}).count()
などのデータベース接続を処理するための感謝道です'make_app'関数のコードを提供してください。 'db'とは何ですか?グローバルオブジェクトですか? –
@AndrewSvetlovがコードを編集しました – theluckyemil