调用 .await() 时,使用 firebase 和协程测试存储库一直挂起

问题描述

我的存储库测试有问题。 这是我第一次真正使用 Firebase,它们现在带有开箱即用的协程,所以我想我会使用它们

但是当我设置测试时,它在调用协程 await() 时永远挂起

这里是我的测试类的内容,后面是我要测试的方法

    @JvmField
    @Rule
    val rule = InstantTaskExecutorRule()

    @get:Rule
    val testCoroutineRule = TestCoroutineRule()

    private lateinit var subject: UserDataRepository

    @MockK
    private lateinit var firestoreRef: FirebaseFirestore
    @MockK
    private lateinit var firebaseAuth: FirebaseAuth
    @MockK
    private lateinit var firebaseStorage: FirebaseStorage
    @MockK
    private lateinit var userDao: UserDao
    @MockK
    private lateinit var context: Context
    @MockK
    private lateinit var authResult: AuthResult

    private val USERS = "Users"

    private val user = UserData("Jo Bloggs")
    private val email = "[email protected]"
    private val password = "ilovefluffycats863$"
    private val username = user.name
    private val uid = "d98dy1x/;10v84i1[,'1"
    private val data = hashMapOf("name" to user.name)

    @Before
    fun setup() {
        MockKAnnotations.init(this)
        every { context.getExternalFilesDir(null)?.absolutePath } returns "testing/path/child"
        subject = UserDataRepository(
            context,firestoreRef,firebaseAuth,firebaseStorage,userDao
        )
    }
    
    @Test
    fun `when createuser called successfully then returns AuthResult`() {
        testCoroutineRule.runBlockingTest {
            //GIVEN
            coEvery { userDao.addUser(user) } returns 1
            coEvery { firebaseAuth.createuserWithEmailAndPassword(email,password).await() } returns authResult
            coEvery { firestoreRef.collection(USERS).document(uid).set(data).await() }

            //WHEN
            val actualAuthResult = subject.createuser(email,password,username)

            //THEN
            Assert.assertEquals(authResult,actualAuthResult)
        }
    }

测试方法

    suspend fun createuser(email: String,password: String,username: String): AuthResult {
        userDao.addUser(UserData(username))
        val data = hashMapOf(
            "name" to username
        )
        val authResult = firebaseAuth.createuserWithEmailAndPassword(email,password).await()
        firestoreRef.collection("Users")
            .document(firebaseAuth.currentUser!!.uid)
            .set(data).await()
        return authResult
    }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)