     case .Regular:
       task = SessionDataTask(session: session, URLRequest: URLRequest, promise: promise)
     case .Partial:
-      if let mock = mocks[request.key] {
+      if let mock = prepareMock(request) {
         task = MockDataTask(mock: mock, URLRequest: URLRequest, promise: promise)
       } else {
         task = SessionDataTask(session: session, URLRequest: URLRequest, promise: promise)
       }
     case .Fake:
-      guard let mock = mocks[request.key] else {
+      guard let mock = prepareMock(request) else {
         promise.reject(Error.NoMockProvided)
         return promise
       }

    let URLRequest: NSMutableURLRequest

    do {
      URLRequest = try request.toURLRequest(baseURLString, additionalHeaders: requestHeaders)
    } catch {
      promise.reject(error)

  }

  public var additionalHeaders = [String: String]()
  public var beforeEach: (Requestable -> Requestable)?
  public var preProcessRequest: (NSMutableURLRequest -> Void)?

  var baseURLString: URLStringConvertible?
