3

iOSアプリケーションに独自のリクエストがある場合、OHHTTPStubsはリクエストをモックしませんか?

テストが実行される前にアプリが Alamofire リクエストを実行した場合、OHHTTPStubs は単体テストでリクエストをモックしません。

  • OHHTTPStubs 4.3.0 with swift support
  • Alamofire 2.0.2

テスト ファイル- 期待どおりに動作します

stub(isHost("httpbin.org")) { _ in
    let stubData = "Hello World!".dataUsingEncoding(NSUTF8StringEncoding)
    return OHHTTPStubsResponse(data: stubData!, statusCode:200, headers:nil)
}

print("@@Start")
Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"])
    .responseString() { request, response, data in
        print(data)
}

ただし、次を AppDelegate.swift に追加すると、機能しなくなり、代わりにサービスに対して実際の HTTP 要求が行われます。

Alamofire.request(.GET, "http://httpbin.org/get")
    .responseString() { request, response, data in
            print(data)
}

後世に残された元の質問

更新:クリーンなプロジェクトで再試行したところ、期待どおりに機能したため、何か他のことが起こっているに違いありません。

最新の Swift 2.0 へのアップグレードでは、OHHTTPStubs はリクエストをスタブ化しておらず、代わりにパススルーされてライブで呼び出されています。

単体テストで短い例を設定しましたが、まだ通過しています。私は何が欠けていますか?

import Foundation
import Quick
import Nimble
import Alamofire
import OHHTTPStubs

class RequestsSpec: QuickSpec {
var data:Result<String>? = nil

override func spec() {
    describe("the request") {
        it("needs to make a request") {

            stub(isHost("httpbin.org")) { _ in
                let stubData = "Hello World!".dataUsingEncoding(NSUTF8StringEncoding)
                return OHHTTPStubsResponse(data: stubData!, statusCode:200, headers:nil)
            }

            Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"])
                .responseString() { request, response, data in
                    print(request)
                    print(response)
                    print(data)
                    print(data.value)
                    self.data = data
            }
            expect(self.data).toEventuallyNot(beNil(), timeout: 3)
        }
    }
}

私は得る

Optional(<NSMutableURLRequest: 0x7f91598e22e0> { URL: http://httpbin.org/get?foo=bar })
Optional(<NSHTTPURLResponse: 0x7f915da8c220> { URL: http://httpbin.org/get?foo=bar } { status code: 200, headers {
    "Access-Control-Allow-Credentials" = true;
    "Access-Control-Allow-Origin" = "*";
    Connection = "keep-alive";
    "Content-Length" = 364;
    "Content-Type" = "application/json";
    Date = "Thu, 01 Oct 2015 04:19:42 GMT";
    Server = nginx;
} })
Optional("{\n  \"args\": {\n    \"foo\": \"bar\"\n  }, \n  \"headers\": {\n    \"Accept\": \"*/*\", \n    \"Accept-Encoding\": \"gzip;q=1.0,compress;q=0.5\", \n    \"Accept-Language\": \"en-US;q=1.0\", \n    \"Host\": \"httpbin.org\", \n    \"User-Agent\": \"ios-consumer-app/com.dante.ouli2 (28; OS Version 9.0 (Build 13A340))\"\n  }, \n  \"url\": \"http://httpbin.org/get?foo=bar\"\n}\n")

Hello World! の代わりに

NSURLSession でリクエストを作成しようとしましたが、OHHTTPStubs は正しく機能しました。OHHTTPStubs/Alamofire の相互作用に何か問題があるように見えますか?

            let url = NSURL(string: "http://httpbin.org/get")

            let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in
                print(NSString(data: data!, encoding: NSUTF8StringEncoding))
                self.data2 = data
            }
  • 迅速なサポートを備えた OHHTTPStubs 4.3.0
  • アラモファイア 2.0.2
4

2 に答える 2