startKoin в бросках класса KoinTest "KoinContext уже запущен" - PullRequest
1 голос
/ 14 апреля 2020

Я использую «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())
    }
}

...