app/lib/assertions/result.js

/**
 * Assert result value
 * @module
 */

var _ = require('underscore');
var assert = require('assert');

/**
 * Assert that result matches that of test.
 * @param {test} test - Test parameters including result property, which can be assertion, object or primitive.
 * @param {*} - Result from running test.
 * @param {callback} done
 */
module.exports = function(test, result, done) {
  if (typeof test.result === 'function') {
    test.result(result, done);
  } else if (typeof test.result === 'object') {
    try {
      assert(_.isEqual(result, test.result));
      done();
    } catch (error) {
      done(new Error(`Object returned does match value expected:\n\n${JSON.stringify(result)}\n\n!==\n\n${JSON.stringify(test.result)}`));
    }
  } else {
    assert.deepEqual(result, test.result);
    done();
  }
};