Модульный тест Асинхронное ожидание не выполнено: Превышено время ожидания Swift

Ответ Тома Андерсона неплох, но kill $(cat $PIDFILE) произойдет только в моей системе, если foo закончен сам по себе или через Ctrl-C. Для меня работает следующее решение

while read g
do
  if [[ $g =~ bar ]]
  then
    kill $!
  fi
done < <(
  exec foo 2> >(tee /dev/tty)
)

0
задан King 17 January 2019 в 10:58
поделиться

2 ответа

Вам нужно fulfill ожидание. Как это:

let expectation = self.expectation(description: "Alert")

DispatchQueue.main.asyncAfter(deadline: .now() + 3.0, execute: {

    expectation.fulfill()
})

waitForExpectations(timeout: 5, handler: nil)

XCTAssert(whatever)

0
ответ дан Gareth Miller 17 January 2019 в 10:58
поделиться

Вы не выполняете своих ожиданий

func testExample() {
    let expec = expectation(description: "Home Code")
    someAsyncTask() { _ in 
       expectation.fulfill()
    }
    wait(for: [expec], timeout: 30)
}

См. Тестирование асинхронных операций с ожиданиями

Примечания:

  • Не передавайте специфический код модульного теста производственному коду, как вы сейчас.
  • Загрузка VC не является асинхронной задачей. поэтому не должно ожидаться ожидание
  • Вы, вероятно, не должны загружать класс Home напрямую, особенно если он вызывает некоторую асинхронную задачу. Вы должны посмотреть на отдельное тестирование асинхронных деталей и использование Mocks / Stubs
0
ответ дан Scriptable 17 January 2019 в 10:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: