Notify user of credential failure and make another attempt
I found the solution to removing the do. I needed to move the error presentation into the flatMap and use materialize so that a network error wouldn't break the observable chain.

// MARK: - function Under Test
func checkCredentials(login: Login, network: Network) -&gt; Observable&lt;Token&gt; {
    let credentials = login.getCredentials()
    let token = credentials.flatMap { (credential) -&gt; Observable&lt;Token&gt; in
        let token = network.getAuthToken(credentials: credential)
            .materialize()
        let error = token.map { $0.error }.filter { $0 != nil }.map { $0! }
        login.presentAuthFailure(error)
        return token.map { $0.element }.filter { $0 != nil }.map { $0! }
    }
    return token
}