Cha*_*had 5 unit-testing uiwebview ios swift
我的应用程序有一个基本的webview控制器来执行一些操作.除了UIWebView的包装外,故事板中的这个视图也不多.控制器本身具有各种公共功能,可以调用它们来加载webview中的页面,如下所示:
class WebViewController: UIViewController, UIWebViewDelegate {
// MARK: Properties
@IBOutlet var webView: UIWebView!
// MARK: UIViewController
override func viewDidLoad() {
super.viewDidLoad()
webView.delegate = self
loadHomePage()
}
// MARK: Public
public func loadHomePage() {
navigateWebView(to: HOME_PAGE)
}
public func loadSettingsPage() {
navigateWebView(to: SETTINGS_PAGE)
}
public func loadSignOutPage() {
navigateWebView(to: SIGN_OUT_PAGE)
}
// MARK: Private
private func navigateWebView(to url: String) {
let request = URLRequest(url: URL(string: url)!)
webView.loadRequest(request)
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试编写单元测试,以验证是否将正确的URL发送到webview的loadRequest函数.请注意,我实际上并不关心加载URL; 这只是一个单元测试,所以我真正想要测试的是,例如,loadSettingsPage将带有SETTINGS_PAGE URL的URLRequest发送到要加载的webview.
我试过这样的事情,没有成功:
_ = webViewController.view // Calls viewDidLoad()
XCTAssertEqual(webViewController.webView.request?.url?.absoluteString, HOME_PAGE)
Run Code Online (Sandbox Code Playgroud)
assertEqual的第一部分的值是nil.
我想我需要以某种方式嘲笑webView,但我不确定如何去做.有什么建议?
作为一个后续,我也希望能够测试什么时候喜欢webView.reload()和webview.goBack()被调用,所以任何指针都会受到赞赏.谢谢!