     public func request(request: NSURLRequest, target: TargetType, completion: (response: NSHTTPURLResponse?, data: NSData?, error: NSError?) -> ()) -> Cancellable {
         let action = StubAction(URL: target.fullURL, method: target.method)
 
-        var sampleResponse = (target as? TargetWithSampleType)?.sampleResponse
+        var response = (target as? TargetWithSampleType)?.sampleResponse ?? self.defaultResponse
         var behavior = self.defaultBehavior
 
         if let stubRule = self.stubs[action] {
-            sampleResponse = stubRule.conditionalResponse(request: request, target: target)
+            response = stubRule.conditionalResponse(request: request, target: target)
             behavior = stubRule.behavior ?? behavior
-        }
-
-        guard let response = sampleResponse else {
-            fatalError("Target not stubbed yet.")
         }
 
         let cancellableToken = StubCancellableToken()

    let behavior: StubBehavior?
    let conditionalResponse: ConditionalResponseClosure

    public init(URL: NSURL, response: StubResponse, behavior: StubBehavior? = nil) {
        self.URL = URL
        self.behavior = behavior
        self.conditionalResponse = { (_, _) in


    /// The network failed to send the request, or failed to retrieve a response (eg a timeout).
    case NetworkError(NSError)

    /// You usually don't need this, It's will raise a fetalError
    case NoStubError
}

public struct StubRule {
