kif-framework / AMYServer

A mock server fully integrated with KIF.
Other
59 stars 11 forks source link

Can't find mocktail files in [NSBundle KIFTestBundle] #11

Open wanbok opened 8 years ago

wanbok commented 8 years ago

I've install AMYServer via Cocoapods So, [NSBundle KIFTestBundle] can't contain my mocktail files. also [NSBundle mainBundle].

These files are contained in [NSBundle allBundles][1]

phatmann commented 8 years ago

Are you using the use_frameworks! option in CocoaPods?

wanbok commented 8 years ago

@phatmann Yeah. I've monkey-patched waitForRequestMatchingMocktail.

    func waitForRequestMatching(mocktail mocktail: String, inBundle bundle: NSBundle? = NSBundle.KIFTestBundle(), withHTTPBodyMatchingBlock block: ((NSData, NSErrorPointer) -> KIFTestStepResult)?, andRespondWithValues values: [String: AnyObject]?) {
        let response: _AMYMocktailResponse?
        let headers: [NSObject: AnyObject]?
        let body: NSData?
        var errorType = "load mocktail"
        do {
            response = try _AMYMocktailResponse(fromTail: mocktail, bundle: bundle)

            errorType = "generate headers"
            headers = try response?.headersWithValues(values)

            errorType = "generate body"
            body = try response?.bodyWithValues(values)

            let request = waitForRequestMatchingBlock { [weak self] (req, error) -> KIFTestStepResult in
                return self?.KIFTestWaitCondition(response?.matchesURL(req.URL, method: req.HTTPMethod, patternLength: nil) ?? false, error: error, errorMessage: "Could not find request matching mocktail.") ??
                {
                    block?(req.HTTPBody ?? NSData(), error)
                    return .Success
                }()
            }

            request.respondWithStatusCode(response?.statusCode ?? 500, headerFields: headers)
            request.sendData(body)
            request.close()
        } catch let error as NSError {
            let errorToThrow = NSError(domain: "KIFTest", code: Int(KIFTestStepResult.Failure.rawValue), userInfo: [NSLocalizedDescriptionKey: "Failed to \(errorType): \(error.localizedDescription)", NSUnderlyingErrorKey: error])
            failWithError(errorToThrow, stopTest: true)
        }
    }

and use it like that

//
//  IntroTest.swift
//  Frip
//
//  Created by 최완복 on 2016. 1. 6..
//  Copyright © 2016년 Frientrip. All rights reserved.
//

import KIF

class IntroTest: KIFTestCase {
    var server: MockingServer { return server() }
    override func beforeAll() {
        server.start()
    }

    override func afterAll() {
        server.stop()
    }

    func testSuccess() {
        server.waitForRequestMatching(mocktail: "successful-intro", inBundle: NSBundle(forClass: self.dynamicType), andRespondWithValues: nil)
    }
}
phatmann commented 8 years ago

Can you submit a pull request with a fix? And be sure to use a new branch for it :-)

wanbok commented 8 years ago

Ok, I'll do it. until next week. ;-)

BenchR267 commented 8 years ago

What about this pull request? 'next week' is long ago :)

wanbok commented 8 years ago

Would be closed by #13

BenchR267 commented 8 years ago

Yeah, I thought that too but unfortunately I had the same error as before. That's why I closed this pull request..