gpt4 book ai didi

swift - 在导航 Controller 中测试 topviewcontroller

转载 作者:行者123 更新时间:2023-11-30 10:37:19 26 4
gpt4 key购买 nike

我想使用 XCTest 对堆栈上的推送进行单元测试。

所以我执行了

XCTAssert(type(of: navigationController.topViewController) is DetailViewController.Type)

当且仅当我在推送 viewController 时没有启用动画时才有效。

self.navigationController!.pushViewController(vc, animated: false)

但是在 viewController 中我想测试我是否启用了动画

self.navigationController!.pushViewController(vc, animated: true)

启用动画后,类型是前一个 View Controller 的类型。

我尝试了 sleep ,并尝试使用 XCTWaiter,即

let result = XCTWaiter.wait(for: [expectation], timeout: 3.0)
if result == XCTWaiter.Result.timedOut {
XCTAssert(type(of: navigationController.topViewController) is DetailViewController.Type)
} else {
XCTFail("Delay interrupted")
}

不幸的是,这对我不起作用。

如何在启用动画的情况下测试导航堆栈?

最佳答案

首先,加载 View Controller ,并将其放入导航 Controller 中。不需要 UIWindow。

sut.loadViewIfNeeded()
let navigation = UINavigationController(rootViewController: sut)

然后让您的测试触发任何应该推送新 View Controller 的内容。

最后,要让它在 UINavigationController 中注册,请执行一次运行循环。

RunLoop.current.run(until: Date())

然后测试可以调查 navigation.viewControllers 中的堆栈。

关于swift - 在导航 Controller 中测试 topviewcontroller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57691654/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com