【问题标题】:How can we test Jetpack Compose callback function on a click action?我们如何在单击操作时测试 Jetpack Compose 回调函数?
【发布时间】:2022-11-27 06:58:09
【问题描述】:

问题是: 我们有一个测试用例,我们希望调用回调函数以响应可组合项中的点击操作。我们如何正确处理这个测试?

【问题讨论】:

    标签: android-jetpack-compose


    【解决方案1】:

    你可以尝试这样的事情:

    @Test
    fun test() {
        var clicked = false
    
        testRule.setContent {
            YourComposable(
                onClick = { clicked = true },
            }
        }
    
        testRule.onNodeWithTag("YourButton")
                .performClick()
        assertTrue(clicked)
    }
    

    【讨论】:

      【解决方案2】:

      我不确定你是否理解state hoistingreference请尝试简单的例子:

      @Composable
      fun ButtonState(modifier : Modifier = Modifier,state : (flag : Boolean)->Unit) {
          var isFlag by remember{ mutableStateOf(false)}
          Button(onClick = {
              isFlag = !isFlag
              state(isFlag)
          },modifier) {
              Text(text = "text")
          }
      }
      
      setContent {
          var flag by remember { mutableStateOf(false) }
          Column {
              ButtonState {
                  flag = it
              }
              Text(text = "$flag")
          }
      }
      

      【讨论】:

        【解决方案3】:
             @get:Rule
                val composeTestRule = createComposeRule()   
             
        
                @Test
                fun `should invoke callback on button click`() {
                   val callback : () -> Unit = mockk()
            
                    composeTestRule.setContent {
                        YourComposable(
                            onClick = callback,
                        )
                    }
                
                    composeTestRule.onNodeWithTag("BUTTON_TAG").performClick()
        
                    verify { callback() }
                }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-09-28
          • 2021-06-16
          相关资源
          最近更新 更多