如何测试自定义UINavigationController行为

时间:2017-02-03 09:03:37

标签: ios swift unit-testing uinavigationcontroller tdd

我试图在我的测试中测试一些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
}

1 个答案:

答案 0 :(得分:0)

我发现了这个问题。 UINavigationController委托是异步的,所以你应该等待它被调用。

在我的情况下,我使用Nimble进行测试,因此使用.toEventually代替.to。它现在等待期望是真的。