Утверждать, что код запускается в какой-то момент модульного теста?

#swift #unit-testing #signals

#swift #модульное тестирование #сигналы

Вопрос:

У меня есть этот модульный тест:

 func testState() {
    searchController.filter.query = "Missouri"
    searchController.resultsSignal.subscribePast(with: self) { sections in

        if sections.count < 1 { return }
        // Want to test that code at least gets to here at some point
        ...
    }
}
  

И я хочу убедиться, что я, по крайней мере, пройду линию if sections.count < 1 { return } в какой-то момент.

Поскольку он запускается при запуске сигнала, мне все равно, есть ли другой сигнал, который запускается в какой-то момент, но я хочу убедиться, что sections.count > 0 в какой-то момент теста.

Есть ли способ сделать это? Я думал использовать логическое значение и инициализировать его значением false, затем установить для него значение true, если sections.count было когда-либо больше единицы, и утверждать, что значение было true, но это не работает, если я не делаю задержку, поскольку я использую сигналы. Спасибо.

Ответ №1:

Вы можете использовать XCTestExpectation и вызвать .fulfill после sections.count , чтобы уведомить тест о том, что асинхронный тест прошел успешно.

 func testState() {
    let expectation = XCTestExpectation(description: "Should execute")
    searchController.filter.query = "Missouri"
    searchController.resultsSignal.subscribePast(with: self) { sections in

        if sections.count < 1 { return }
        // Want to test that code at least gets to here at some point
        expectation.fulfill()
        ...
    }
    wait(for: [expectation], timeout: 10) // Will fail if .fulfill does not get called within ten seconds
}