I have a UIViewController
that implements some WKNavigationDelegate
functions, and I want to unit test the logic in these functions. Here's an example:
func webView(_ webView: WKWebView,
decidePolicyFor navigationAction: WKNavigationAction,
decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
guard let url = navigationAction.request.url else {
decisionHandler(.cancel)
return
}
if url.absoluteString != "https://my-approved-url" {
decisionHandler(.cancel)
return
}
decisionHandler(.allow)
}
I'd like my unit test to make sure decisionHandler
is called with the right WKNavigationActionPolicy
based on the request.url
of the WKNavigationAction
.
I can't figure out how to test this function, however. Calling .load()
on the webview does not trigger the delegate functions when I'm running my test project. I have also tried to call this function directly to test it, but it doesn't seem to be possible to instantiate a new WKNavigationAction
of my own (.request is read-only).
What is the right way to unit test logic in WKNavigationDelegate
functions?