Я использую «withTestAppliction» в одном из моих тестов, чтобы проверить, работает ли маршрут. Перед всеми тестами в БД-таблице «Коты» не должно быть записей. Чтобы получить DAO, мне нужен Коин в этом тесте, но если конфликтует с «withTestAppliction», где Коин также запускается и выбрасывает A KoinContext is already started
[Обновить]
Я знаю, что могу использовать что-то вроде handleRequest(HttpMethod.Delete, "/cats")
но я не хочу выставлять этот Rest-Interface. Даже для тестирования.
@ExperimentalCoroutinesApi
class CatsTest: KoinTest {
companion object {
@BeforeClass
@JvmStatic fun setup() {
// once per run
startKoin {
modules(appModule)
}
}
@AfterClass
@JvmStatic fun teardown() {
// clean up after this class, leave nothing dirty behind
stopKoin()
}
}
@Before
fun setupTest() = runBlockingTest {
val dao = inject<CatDAO>()
dao.value.deleteAll()
}
@After
fun cleanUp() {
}
@Test
fun testCreateCat() {
withTestApplication({ module(testing = true) }) {
val call = createCat(predictName("Pepples"), 22)
call.response.status().`should be`(HttpStatusCode.Created)
}
}
}
fun TestApplicationEngine.createCat(name: String, age: Int): TestApplicationCall {
return handleRequest(HttpMethod.Post, "/cats") {
addHeader(HttpHeaders.ContentType, ContentType.Application.FormUrlEncoded.toString())
setBody(listOf(
"name" to name,
"age" to age.toString()
).formUrlEncode())
}
}