diff --git a/lib/test.js b/lib/test.js index e505676f..1b0c998c 100644 --- a/lib/test.js +++ b/lib/test.js @@ -7,7 +7,6 @@ var request = require('superagent') , util = require('util') , http = require('http') , https = require('https') - , assert = require('assert') , Request = request.Request; /** @@ -16,6 +15,35 @@ var request = require('superagent') var port = 3456; +/** + * An implementation of deepEqual. + * If should or Chai are available, use them for better output. + */ +var deepEqual; +[ + ['should', function(module, a, b) { a.should.eql(b); }], + ['chai', function(module, a, b) { module.expect(a).to.eql(b); }], + ['assert', function(module, a, b) { + try { + module.deepEqual(a, b); + } catch (err) { + var astr = util.inspect(a, {depth: null}); + var bstr = util.inspect(b, {depth: null}); + throw new Error('expected ' + bstr + ' response body, got ' + astr); + } + }] +].some(function(pair) { + var module, moduleDeepEqual = pair[1], moduleName = pair[0]; + try { + module = require(moduleName); + deepEqual = moduleDeepEqual.bind(null, module); + return true; + } catch (err) { + // Module not available + return false; + } +}); + /** * Expose `Test`. */ @@ -156,11 +184,9 @@ Test.prototype.assert = function(res, fn){ // parsed if ('object' == typeof body && !isregexp) { try { - assert.deepEqual(body, res.body); + deepEqual(res.body, body); } catch (err) { - var a = util.inspect(body); - var b = util.inspect(res.body); - return fn(new Error('expected ' + a + ' response body, got ' + b)); + return fn(err); } } else { // string