小ネタです。 Recompose が発生していないことをテストするシンプルな方法を紹介します。
コンポジション回数をカウントする
次のコードは BasicTextField2 のテストコード からの引用です。やっていることは実にシンプルでコンポジション回数をカウントするための変数(compositionCount
)を1つ用意し、それを Composable 関数の冒頭でインクリメントするだけです。
このコードでは "hello" "world" という単語を入力したときに Recompose が発生していないことをテストしています。よって最後に compositionCount == 1
であることを確認しています。
fun textField_imeUpdatesDontCauseRecomposition() {
val state = TextFieldState()
var compositionCount = 0 // コンポジション回数をカウントする変数
rule.setContent {
compositionCount++ // Composable 関数の冒頭でカウントをインクリメントする
BasicTextField2(
state = state,
modifier = Modifier
.fillMaxSize()
.testTag(Tag),
)
}
rule.onNodeWithTag(Tag).performTextInput("hello")
rule.onNodeWithTag(Tag).performTextInput("world")
rule.runOnIdle {
assertThat(compositionCount).isEqualTo(1) // コンポジション回数が1であることを確認する
}
}
}