Skip to content

zeppelin/fakehr

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

fakehr

fakehr is a tiny (~50loc) library for intercepting ajax requests in the browser for testing purposes. It is application and test library agnostic. fakehr depends on FakeXMLHttpRequest.

Using

fakehr has a minimal public interface:

###fakehr.start() Momentarily replaces the native XMLHttpRequest object with a fake one that registers itself with fakehr when new requests are attempted. These requests will not make HTTP requests. Instead a response is triggered by the developer. These requests objects are provided by FakeXMLHttpRequest.

###fakehr.stop() Stops intercepting requests and restores the native XMLHttpRequest object.

###fakehr.requests An array of intercepted requests.

###fakehr.clear() Clears the array of intercepted requests. If response wasn't triggered on these requests, they will never complete.

###fakehr.reset() Clears the intercepted requests and restores the native XMLHttpRequest object.

###fakehr.match(httpMethod, url, [readyState]) Searches the intercepted requests for the first open (readyState of 1) request whose HTTP method and url match the passed arguments. Optionally you can provide a numeric readyState code value to search for requests in that state.

Why not Sinon.JS or something else?

Sinon.JS includes much more than just request mocking. I wanted a single purpose library. Most other HTTP mocking libraries take the approach of acting like a fake server where requests registered before a test runs and canned responses are triggered immediately when they occur. This makes it cumbersome to do things like

  • specify multiple responses to the similar requests in a specific order
  • control where in the flow of execution a response occurs (for testing behavior like loading screens)
  • control the response order and timing of multiple simultaneous requests
  • testing the effect of requests that fail entirely and are aborted by the browser

Test library integration

fakehr doesn't integrate with any specific testing framework, so does not include features like

  • failing a test if there are unhandled requests
  • failing a test if a request is made to an unknown url
  • framework-specific helpers or matchers
  • automatically starting before tests run
  • automatically resetting when tests complete

Instead, you should implement these features yourself. A very simple QUnit example:

module("testing something that makes requests", {
  setup: function(){
    fakehr.start();
  },
  teardown: function(){
    var requests = fakehr.requests;
    var request;

    for(var i = 0; i < requests.length; i++){
      request = requests[i];
      if(request.readyState !== 4) {
        fakehr.reset();
        throw("A "+ request.method +" request to "+ request.url +" was left unhandled!");
      }
    }

    fakehr.reset();
  }
});

Testing

Tests are written in QUnit and run through the Karam test runner.

Run with:

karam start

Todo

  • Replace and Restore ActiveX-based requests for IE

About

XHR request interceptor for tests. Application and test framework agnostic.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 100.0%