Helio
10/30/2024, 7:12 AMcheckModules
.
I was trying to following the documentation and I noticed that replacing the old validation checkModules
with the new mechanism verify()
it fails with the error: 🧵Helio
10/30/2024, 7:15 AM* ----- > Missing definition for '[field:'engine' - type:'io.ktor.client.engine.HttpClientEngine']' in definition '[Singleton: 'io.ktor.client.HttpClient',qualifier:myHttpClient]'.
- Fix your Koin configuration -
1- add missing definition for type 'io.ktor.client.engine.HttpClientEngine'. like: singleOf(::io.ktor.client.engine.HttpClientEngine)
or
2- else define injection for 'io.ktor.client.HttpClient' with:
module.verify(
injections = injectedParameters(
definition<io.ktor.client.HttpClient>(io.ktor.client.engine.HttpClientEngine::class)
)
)
Old Validation
@Test
fun checkAllModules() = checkModules {
modules(
httpClientModule,
redisModule,
serviceModule,
useCaseModule
)
New Validation
@Test
fun checkAllModules() {
module {
includes(
httpClientModule,
redisModule,
serviceModule,
useCaseModule
)
}.verify()
}
Olivier Patry
10/30/2024, 7:20 AM@Test
fun `verify network module`() {
networkModule.verify(
injections = injectedParameters(
definition<HttpClient>(HttpClientEngine::class, HttpClientConfig::class),
)
)
}
I'm not sure this was the best thing to do or if it just hides error…
At runtime my dependency graph is perfectly fine, but the test was failing 🤷Helio
10/30/2024, 7:22 AMinjections = injectedParameters(
definition<HttpClient>(io.ktor.client.engine.HttpClientEngine::class),
)
Then if I re-run, it asks to add
injections = injectedParameters(
definition<HttpClient>(io.ktor.client.HttpClientConfig::class),
)
Then, after re-run asks me to re-add the first one again (which seems to be overridden). That's why I'm super confusedHelio
10/30/2024, 7:23 AMHelio
10/30/2024, 7:25 AM@Test
fun checkAllModules() {
module {
includes(
httpClientModule,
redisModule,
serviceModule,
useCaseModule
)
}.verify(
injections = injectedParameters(
definition<HttpClient>(HttpClientEngine::class, HttpClientConfig::class),
definition<TokenatorRedisClient>(io.lettuce.core.RedisClient::class)
)
)
}
This seems to have fixed the issue indeed. I reckon I don't understand this much. 🤦🏽Olivier Patry
10/30/2024, 7:25 AMHttpClientEngine::class
, the second time once added it, I then had HttpClientConfig::class
, leading to add both classes to the definition
call.Helio
10/30/2024, 7:26 AMinjections = injectedParameters(
definition<HttpClient>(io.ktor.client.engine.HttpClientEngine::class),
definition<HttpClient>(io.ktor.client.HttpClientConfig::class),
)
Alexandru Caraus
10/30/2024, 11:37 AMAlexandru Caraus
10/30/2024, 11:37 AMAlexandru Caraus
10/30/2024, 11:38 AMarnaud.giuliani
11/15/2024, 12:55 PM