我想编写一个单元测试来查看一个视图控制器是否正在展示另一个视图控制器。
这是我在测试中编写的代码。当我运行单元测试并调用present方法时,按钮中的代码成功被调用。当然,如果我运行应用程序,它也能正常工作。 当我点击按钮时,我会得到我的已呈现视图控制器。 如果我在handleActionButtonTap()内部键入let vc = presentedViewController,并打印(vc),则会得到导航控制器作为结果。但为什么我不能在单元测试中这样做呢?
有人知道发生了什么吗?
谢谢
func testMainTabController_WhenActionButtonIsTapped_NewSuppliersInvoiceControllerIsCreatedV2() {
let sut = MainTabBarController()
sut.loadViewIfNeeded()
let myExpectation = expectation(description: "The sut should present a view controller")
sut.actionButton.sendActions(for: .touchUpInside)
if let x = sut.presentedViewController {
myExpectation.fulfill()
} else {
XCTFail("The view controller was not presented")
}
wait(for: [myExpectation], timeout: 3)
}
这里我得到的结果是测试失败。因为我得到了一个 nil 的 presentedViewController。这是按钮的代码:
@objc func handleActionButtonTap() {
let suppliersInvoiceController = SuppliersInvoiceController()
let navCon = UINavigationController(rootViewController: suppliersInvoiceController)
navCon.modalPresentationStyle = .fullScreen
present(navCon, animated: true, completion: nil)
}
这是我在测试中编写的代码。当我运行单元测试并调用present方法时,按钮中的代码成功被调用。当然,如果我运行应用程序,它也能正常工作。 当我点击按钮时,我会得到我的已呈现视图控制器。 如果我在handleActionButtonTap()内部键入let vc = presentedViewController,并打印(vc),则会得到导航控制器作为结果。但为什么我不能在单元测试中这样做呢?
有人知道发生了什么吗?
谢谢