Andreas Jost
12/02/2019, 5:45 PMview.onLoginListener = {
launch {
val user = view.userTextField.getTextProperty()
val pass = view.passTextField.getTextProperty()
val result = doLogin(user, pass)
// ...
}
}
It works perfectly fine on Android and iOS devices, but I can't get tests running. If I invoke view.onLoginListener in the test function, nothing happens. The presenter doesn't run the code block. Here is an excerpt of my test class: (see reply in thread)class LoginPresenterTest {
private lateinit var presenter: LoginPresenter
@MockK
lateinit var view: LoginView
private val user = "MyUser"
private val pass = "MyPass"
@MockK
lateinit var doLogin: DoLogin
@Before
fun onSetup(): Unit = MockKAnnotations.init(this).also {
@ExperimentalCoroutinesApi
Dispatchers.setMain(Dispatchers.Default)
presenter = LoginPresenter(doLogin)
coEvery { doLogin("MyUser", "MyPass") } returns LoginResult.Success
every { view.onLoginListener = any() } just Runs
every { view.onLoginListener } returns {}
every { view.userTextField.getTextProperty() } returns user
every { view.passTextField.getTextProperty() } returns pass
}
@Test
fun onLoginSuccess() {
runBlocking { presenter.attachView(view) }
view.onLoginListener()
coVerify {
view.userTextField.getTextProperty()
view.passTextField.getTextProperty()
doLogin(user, pass)
view.startHomeView()
}
}
}