Xcode 11 : iOS 13 在单元测试时特别不再触发 `viewDidAppear`
Xcode 11 : iOS 13 specifically no longer triggers `viewDidAppear` when unit testing
具体来说,这在使用 iOS 12:
进行测试时会通过
let viewController = ViewController()
let _ = viewController.view
let window = UIWindow(frame: UIScreen.main.bounds)
window.layer.speed = 10
viewController.modalPresentationStyle = .fullScreen
viewController.beginAppearanceTransition(true, animated: false)
window.rootViewController = viewController
window.makeKeyAndVisible()
viewController.endAppearanceTransition()
...
XCTAssert(vc.viewDidAppearCalled == true)
不再通过。
ViewController 的 viewDidLoad
和 viewWillAppear
仍然被调用。
有什么想法吗?
在 iOS13 中,ViewController 生命周期发生了微妙的变化。 viewWillAppear
等现在异步加载,因此需要进行某种程度的异步测试(或等待)。找不到关于此的任何文档,我确定其中有细微之处,但这解决了问题。
具体来说,这在使用 iOS 12:
进行测试时会通过let viewController = ViewController()
let _ = viewController.view
let window = UIWindow(frame: UIScreen.main.bounds)
window.layer.speed = 10
viewController.modalPresentationStyle = .fullScreen
viewController.beginAppearanceTransition(true, animated: false)
window.rootViewController = viewController
window.makeKeyAndVisible()
viewController.endAppearanceTransition()
...
XCTAssert(vc.viewDidAppearCalled == true)
不再通过。
ViewController 的 viewDidLoad
和 viewWillAppear
仍然被调用。
有什么想法吗?
在 iOS13 中,ViewController 生命周期发生了微妙的变化。 viewWillAppear
等现在异步加载,因此需要进行某种程度的异步测试(或等待)。找不到关于此的任何文档,我确定其中有细微之处,但这解决了问题。