🐷

[iOS]シミュレータでネットワークオフの時の挙動を再現する

2021/12/01に公開

備忘録用。
UIテスト時にネットワークオフの時の挙動を再現する必要があった。
シミュレータからコントロールセンタを触ることができないので、Xcodeのツールを使うかネットワークをモッキングする事でのみ再現が可能。

Xcodeのツールを使うとCIでのテスト実行の難易度が上がりそうだったので、今回はOHHTTPStubsを使って対応した。

import OHHTTPStubs
import OHHTTPStubsSwift

private weak var disableNetworkConnectionStub: HTTPStubsDescriptor?

protocol PageObject: AnyObject {}

extension PageObject {
    private static var allways: HTTPStubsTestBlock {
        isScheme("https") || isScheme("http")
    }

    func disableNetworkConnection(given condition: @escaping HTTPStubsTestBlock = allways) {
        disableNetworkConnectionStub = stub(condition: condition) { _ in
            let notConnectedError = NSError(domain: NSURLErrorDomain, code: URLError.notConnectedToInternet.rawValue)
            return .init(error: notConnectedError)
        }
    }

    func enableNetworkConnection() {
        guard let stub = disableNetworkConnectionStub else { return }
        HTTPStubs.removeStub(stub)
    }
}

Discussion