繁体   English   中英

如何在 Espresso 测试中等待 Coroutine 响应?

[英]How to wait for Coroutine response in Espresso test?

这个函数是从我的活动中执行的,以检查是否启用了特定的功能标志,因此注入了dispatcher.io() ,对于测试模式,调度程序是Main


fun isFeatureFlagEnabled(nameKey: String, completion: (enabled: Boolean) -> Unit) {
        CoroutineScope(context = dispatcher.io()).launch {
            val featureFlag = featureFlagsRepository.featureFlagsDao.getFeatureFlag(nameKey)
            if (featureFlag != null) {
                completion(featureFlag.isEnabled)
            }
            else {
                completion(false)
            }
        }
    }

如果活动中的函数,这是调用

private fun launchClearentCardOnFileBaseOnFeatureFlag(cardNavHelper: CardNavHelper){
        featureFlagsHelper?.isFeatureFlagEnabled(CLEARENT_CARD_ON_FILE){enable ->
            if(enable){
                putFragment(
                    ClearentNativeFormFragment.newInstance(cardNavHelper))
            }else{
                putFragment(
                    ClearentCardOnFileFormFragment.newInstance(cardNavHelper))
            }
        }
    }

这是我的测试失败,因为 Espresso 不等待我作为参数传递的 lambda 函数在检查数据库后返回响应(它是一个inMemoryDatabase

@Test
    fun testFFClearentNativeFormEnable(){

        mockWebServer.setDispatcher(BusinessWithAddonsAndPaymentProcessorClearentDispatcher())


        val application = ApplicationProvider.getApplicationContext<SchedulicityApplication>()

        runBlocking(Dispatchers.Main) {
            application.featureFlagsHelper.featureFlagsRepository.featureFlagsDao.insertFeatureFlags(
                    featureFlagsEnable
            )
        }

        intent.putExtra(Constants.INTENT_KEY_CARD_ON_FILE_EXTRAS, cardNavHelperFromClientRecord)
        activityTestRule.launchActivity(intent)
        
        runBlocking { delay(10000) }

        populateClearentForm(validCardNumber = false, validExpDate = true)

    }

我必须把这个延迟runBlocking { delay(10000) }其他方式失败。 所以我的问题是。 你知道我如何在 UI 线程中等待协程响应以便我的测试可以通过吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM