javascript - How to expose code in an a closure so it can be unit tested with Jasmine? -
i new unit testing javascript , trying test code jasmine 2.3.4. have written application code (main.js) , put inside closure avoid global variables, e.g.
main.js
(function(){ var baseurl = "https://google.co.uk"; // rest of application.. })();
here testing code starting with:
mainspec.js
describe('document setup should set base uri', function () { it('base uri', function () { expect(baseuri).toequal("https://google.com"); }); });
the problem i'm having don't know how expose code inside anonymous function in main.js in such way available tested in mainspec.js. best approach making code in main.js accessible testing code? i'm not using require or module loader. thanks.
you need test mocking things outside of code baseuri
uses. example, maybe code $.get(baseuri + '/something', ...);
go stub $.get
, expect have been called uri starts baseuri
.
if option, using commonjs makes testing easier. able make module this:
function myclass(baseuri) { this.baseuri = baseuri; } module.exports = myclass; myclass.prototype.geturi() { return this.baseuri; } ...
then test doing:
var myclass = require('./myclass); describe('myclass', function() { it('uses set baseuri', function() { var myclass = new myclass('https://google.com'); expect(myclass.getbaseuri()).toequal('https://google.com'); }); ... });
with commonjs tools, can mock or proxy modules module depends on (for example, browserify, used proxyquireify). way can test how interacts other modules. if follow single responsibility principle, means modules stay smaller , change less , easier test.
Comments
Post a Comment