我试图在我的测试中测试一些UINavigationController自定义子类委托行为,但委托方法永远不会在测试中触发。我已经尝试将appdelegate窗口rootViewController设置为导航并访问.view属性,但推送视图控制器永远不会触发willShow委托方法。
调用非测试应用程序(运行应用程序并导航)。
这是一个代码示例:
let firstController = UIViewController()
let secondController = UIViewController()
let navigationController = BurgerNavigationController(rootViewController: firstController)
navigationController.pushViewController(secondController, animated: true)
expect(secondController.navigationItem.backBarButtonItem).notTo(beNil())
我希望导航控制器可以调用它
func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
委托方法。它在运行应用程序时被调用,但我无法弄清楚如何测试它。
这是UINavigationController的自定义初始化我使用:
override init(rootViewController: UIViewController) {
super.init(rootViewController: rootViewController)
delegate = self
}
并且实现了委托方法,但从未在同一个类中调用过:
func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
//Code here never called on tests but called on real app
}
答案 0 :(得分:0)
我发现了这个问题。 UINavigationController委托是异步的,所以你应该等待它被调用。
在我的情况下,我使用Nimble进行测试,因此使用.toEventually
代替.to
。它现在等待期望是真的。