xavier.seignard xavier.seignard - 1 year ago 240
Node.js Question

How to access and test an internal (non-exports) function in a node.js module?

I'm trying to figure out on how to test internal (i.e. not exported) functions in nodejs (preferably with mocha or jasmine). And i have no idea!

Let say I have a module like that:

function exported(i) {
return notExported(i) + 1;

function notExported(i) {
return i*2;

exports.exported = exported;

And the following test (mocha):

var assert = require('assert'),
test = require('../modules/core/test');

describe('test', function(){

describe('#exported(i)', function(){
it('should return (i*2)+1 for any given i', function(){
assert.equal(3, test.exported(1));
assert.equal(5, test.exported(2));

Is there any way to unit test the
function without actually exporting it since it's not meant to be exposed?

Answer Source

The rewire module is definitely the answer.

Here's my code for accessing an unexported function and testing it using Mocha.


function logMongoError(){
  console.error('MongoDB Connection Error. Please make sure that MongoDB is running.');


var rewire = require('rewire');
var chai = require('chai');
var should = chai.should();

var app = rewire('../application/application.js');

logError = app.__get__('logMongoError'); 

describe('Application module', function() {

  it('should output the correct error', function(done) {
      logError().should.equal('MongoDB Connection Error. Please make sure that MongoDB is running.');
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download