首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >把阿拉莫火和OHHTTPStubsWorking放在一起

把阿拉莫火和OHHTTPStubsWorking放在一起
EN

Stack Overflow用户
提问于 2016-04-01 16:55:29
回答 3查看 1.9K关注 0票数 2

我正在尝试为我的单元测试设置OHHTTPStubs来使用Alamofire,但是当使用Alamofire时,它们似乎总是从活动网络加载。我已经在测试目标中关闭了使用主机应用程序,并确保首先使用OHHTTPStubs。

下面是一个示例测试,其中从Alamofire加载的结果来自实时网络:

代码语言:javascript
复制
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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-21 17:23:55

至少在我的特殊情况下,通过创建具有自定义OHHTTPStubs和配置的自定义管理器,我能够将阿拉莫火与NSURLSession联系起来。

代码语言:javascript
复制
import XCTest
import Alamofire
import OHHTTPStubs
@testable import AlamofireOHHTTPStubs

class AlamofireOHHTTPStubsTests: XCTestCase {

    let manager: Manager = {
        let configuration = NSURLSession.sharedSession().configuration

        //The most important string!
        OHHTTPStubs.setEnabled(true, forSessionConfiguration: configuration)

        configuration.URLCache = nil
        let delegate = Manager.SessionDelegate()
        let session = NSURLSession(configuration: configuration, delegate: delegate, delegateQueue: nil)
        return Manager(session: session, delegate: delegate)!
    }()

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

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

        let expectation = expectationWithDescription("alamofire request expectation")
        manager.request(.GET, "https://httpbin.org/get").responseJSON { (response) in
            switch response.result {
            case .Success(let json as NSDictionary):
                XCTAssertEqual(json["data"] as? String, "val")
            default:
                XCTFail()
            }
            expectation.fulfill()
        }
        waitForExpectationsWithTimeout(1.0, handler: nil)
    }

}
票数 4
EN

Stack Overflow用户

发布于 2016-09-01 06:24:14

对我来说,问题是我的Podfile丢失了pod 'OHHTTPStubs',我在那里只有pod 'OHHTTPStubs/Swift'。正确的Podfile应该如下所示:

代码语言:javascript
复制
pod 'OHHTTPStubs'  # This one required!!
pod 'OHHTTPStubs/Swift'  # This one optional

所有这些都记录在OHTTPStubs自述中。

票数 1
EN

Stack Overflow用户

发布于 2017-07-24 10:56:24

如果有人想知道如何在Alamofire 4和Swift 3中设置自定义管理器,下面是解决方案:

代码语言:javascript
复制
let sessionManager: SessionManager

init() {
    let configuration = URLSessionConfiguration.default

    OHHTTPStubs.setEnabled(true, for: configuration)

    configuration.urlCache = nil

    sessionManager = SessionManager(configuration: configuration)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36361812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档