タイムアウトを発生させずに、テストの進行をT秒間遅らせたい。
最初に私は明白なことを試みました:
_sleep(5)
XCTAssert(<test if state is correct after this delay>)
_
しかし、それは失敗しました。
それから私は試しました:
_let promise = expectation(description: "Just wait 5 seconds")
waitForExpectations(timeout: 5) { (error) in
promise.fulfill()
XCTAssert(<test if state is correct after this delay>)
}
_
私のXCTAssert()
は成功しました。しかし、waitForExpectations()
はタイムアウトで失敗しました。
これは XCTest
wait関数 のドキュメントによると次のようになっています。
タイムアウトは常にテストの失敗として扱われます。
私のオプションは何ですか?
XCTWaiter.wait 関数を使用できます。例えば:
let exp = expectation(description: "Test after 5 seconds")
let result = XCTWaiter.wait(for: [exp], timeout: 5.0)
if result == XCTWaiter.Result.timedOut {
XCTAssert(<test if state is correct after this delay>)
} else {
XCTFail("Delay interrupted")
}