All Projects → elcuervo → Vcr.js

elcuervo / Vcr.js

VCR for javascript

Programming Languages

javascript
184084 projects - #8 most used programming language

VCR.js

Build Status

VCR

Record XMLHttpRequest calls and saves them using localStorage or files if using Nodejs. It's a js implementation of myronmarston's VCR but for javascript without any dependencies

$ npm install vcr

Config

VCR.configure(function(c) {
  c.hookInto = window.XMLHttpRequest;
  c.cassetteLibraryDir = "recorder"; // default: 'cassettes'
  c.host = "http://localhost:9393/"; // will prepend req url
});

The only required config is which object to intercept, for now it only works with XMLHttpRequest to catch ajax requests.

hookInto: object to intercept
cassetteLibraryDir: when using nodejs defines where to store cassettes
host: useful when running within node and want to cache request to save, destroy, update, etc.

How to use it

I try to make it as similar to original VCR as possible. Using Gerbil it's something like this:

scenario("Ajax interception", {
  'setup': function() {
    VCR.configure(function(c) {
      c.hookInto = window.XMLHttpRequest;
    });
  },

  'Recording ajax request': function(g) {
    VCR.useCassette('test', function(v) {
      XMLHttpRequest = v.XMLHttpRequest;

      var makeRequest = function() {
        var ajax = new XMLHttpRequest();

        ajax.open('GET', 'test.html');
        ajax.onreadystatechange = function() {
          if(ajax.readyState === 4) {
            g.assertEqual("Hello World!\n", ajax.responseText);
          }
        };
        ajax.send(null);
      }
      // Record First Request
      makeRequest();

      // Wait for it...
      g.setTimeout(function() { makeRequest(); }, 100);
    });
  }
});

What will happen?

If you are using nodejs .json files will be created as cassetes to reproduce afterwards. On the other hand if you are running it in a browser localStorage will be used to persist the recordings.

Special Thanks

Pablo Dejuan for the idea.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].