Here, I wrote a simple utilities class in Javascript that parses and stringify Json data.
//public/js/utilities.js
function UtilitiesClass(){
var parserJson = function(obj){
if (typeof(obj) !== "undefined") {
return JSON.parse(obj);
};
}
var stringifyJson = function(obj){
if (typeof(obj) !== "undefined") {
return JSON.stringify(obj);
};
}
}
module.exports = UtilitiesClass
Then in my test.js
require('../public/js/utilities.js');
describe('JS Utilities Classs Tests', function () {
var jsonObjToStr, strtojsonObj;
beforeEach(function () {
this.jsonObjToStr = [1, 2, 3, 4];
this.strtojsonObj = "[1, 2, 3, 4]";
});
it('should parse a string into JSON ', function () {
expect(parserJson(this.strtojsonObj)).to.not.be.undefined;
});
it('should stringify JSON into a string', function () {
expect(stringifyJson(this.jsonObjToStr)).to.not.be.undefined;
});
});
Then when I tried running mocha
, I got the following error output.
andy@LINUXAWCM:~/Projects/Javascript/e-shop-gadgets$ mocha
JS Utilities Classs Tests
1) should parse a string into JSON
2) should stringify JSON into a string
0 passing (12ms)
2 failing
1) JS Utilities Classs Tests should parse a string into JSON :
ReferenceError: parserJson is not defined
at Context.<anonymous> (test/test.js:12:18)
2) JS Utilities Classs Tests should stringify JSON into a string:
ReferenceError: stringifyJson is not defined
at Context.<anonymous> (test/test.js:16:16)
Why wouldn't this simply work? The require statement on public/js/utilities.js
comes out fine. But it's saying the parserJson
and stringifyJson
are not defined or found when really it's already loaded.
Isn't it?
Simply declaring a variable inside a function is not enough, you need to return these since they aren't available outside the function's scope.
You're also exporting a function and not calling it.
Also requiring a file doesn't magically make your variables available to your scope.
Though you probably don't need to export a function, just each method.
Then you'd use