2

単体テスト用に OHHTTPStubs を Alamofire と連携するようにセットアップしようとしていますが、Alamofire を使用すると常にライブ ネットワークから読み込まれるように見えます。テスト ターゲットでホスト アプリケーションの使用をオフにし、OHHTTPStubs が最初に使用されるようにしました。

以下は、Alamofire からロードされた結果がライブ ネットワークからのものであるサンプル テストです。

import XCTest
import OHHTTPStubs
import Alamofire

@testable import TestAlamoFireStubs

class TestAlamoFireStubsTests: XCTestCase {

    let responseText = "{'data':'val'}"

    override func setUp() {
        super.setUp()
        stub(isHost("httpbin.org")) {request -> OHHTTPStubsResponse in
            let stubData = self.responseText.dataUsingEncoding(NSUTF8StringEncoding)
            return OHHTTPStubsResponse(data:stubData!, statusCode:200, headers:nil)
        }
    }

    func testNSURLSession(){
        let expectation = expectationWithDescription("Check NSURLSession")
        let url = NSURL(string:"https://httpbin.org/get")
        let dataTask = NSURLSession.sharedSession().dataTaskWithURL(url!){ data, response, error in
            let responseString = NSString(data:data!, encoding:NSUTF8StringEncoding) as? String
            XCTAssertEqual(responseString, self.responseText) // succeeds
            expectation.fulfill()
        }
        dataTask.resume()
        waitForExpectationsWithTimeout(10, handler:nil)
    }

    func testAlamofire() {
        let expectation = expectationWithDescription("Check Alamofire")
        Alamofire.request(.GET, "https://httpbin.org/get").response{ request, response, data, error in
            let responseString = NSString(data:data!, encoding:NSUTF8StringEncoding) as? String
            XCTAssertEqual(responseString, self.responseText) // fails
            expectation.fulfill()
        }
        waitForExpectationsWithTimeout(10, handler:nil)
    }
}

サンプル プロジェクトへのリンク: https://www.dropbox.com/s/b0qdvjpk8t6r525/TestAlamoFireStubs.zip

4

3 に答える 3