Menurut dokumentasi tentang pengujian fungsi asinkron di Django 3.1, seharusnya mungkin untuk hanya menunggu metode klien async dalam konteks async tanpa harus membungkusnya dalam sync_to_async atau database_sync_to_async karena ia mengimplementasikan semua metode. Apakah ada cara untuk mengatasi ini?

Permintaan pertama berhasil, tetapi permintaan kedua dan ketiga tidak.

class TestAsyncClient(TransactionTestCase):
    def setUp(self):
        self.async_client = AsyncClient()
        self.user = get_user_model().objects.create_user("user_a@example.com", "passwd_a")

    async def test_async_login(self):
        """Use the async client to login without using sync_to_async"""

        request = await self.async_client.get("/")
        self.assertTrue(request)
        
        logged_in = await self.async_client.login(
            username="user_a@example.com", password="passwd_a"
        )
        self.assertTrue(logged_in)

        logged_in = await self.async_client.force_login(self.user)
        self.assertTrue(logged_in)
0
Moritz 4 November 2020, 20:16

1 menjawab

Jawaban Terbaik

Pertama-tama, Anda mendapatkan tanggapan, bukan permintaan.

Apa yang dievaluasi ke Benar, akan menjadi response.ok.

Namun, async_client.login bukan metode async dan tidak mengirim permintaan, sama dengan force_login. Mereka hanya memalsukan sesi dengan pengguna yang masuk dan sinkron (dengan akses database jika SESSION_STORE Anda adalah ModelBackend).

0
Melvyn 4 November 2020, 17:30