I am using Mocha in order to unit test an application written for Node.js.
I wonder if it's possible to unit test functions that have not been exported in a module.
Example:
I have a lot of functions defined like this in foobar.js
:
function private_foobar1(){
...
}
function private_foobar2(){
...
}
And a few functions exported as public:
exports.public_foobar3 = function(){
...
}
The test case is structured as follows:
describe("private_foobar1", function() {
it("should do stuff", function(done) {
var stuff = foobar.private_foobar1(filter);
should(stuff).be.ok;
should(stuff).....
Obviously this does not work, since private_foobar1
is not exported.
What is the correct way to unit-test private methods? Does Mocha have some built-in methods for doing that?
Check out the rewire module. It allows you to get (and manipulate) private variables and functions within a module.
So in your case the usage would be something like:
var rewire = require('rewire'),
foobar = rewire('./foobar'); // Bring your module in with rewire
describe("private_foobar1", function() {
// Use the special '__get__' accessor to get your private function.
var private_foobar1 = foobar.__get__('private_foobar1');
it("should do stuff", function(done) {
var stuff = private_foobar1(filter);
should(stuff).be.ok;
should(stuff).....