javascript - How can I pass a dependency to a constructor function which is needed by its prototype/base class -
i have chicken or egg first there... problem.
the alarmoverlay derives overlayview.
before alarmoverlay created calling constructor function 'google' object needed inheritation overlayview. google object passed constructor...
i can not inject google object requirejs because write unit test alarmoverlay class http calls must avoided... passing in own google fake object.
how have rewrite code, google object not undefined when new google.maps.overlayview() call done?
define(['jquery','inject google here not allowed because of unit test'], function($) { alarmoverlay.prototype = new google.maps.overlayview(); function alarmoverlay(bounds, alarmnumber, alarmcssclass , google) { this.google = google; } alarmoverlay.prototype.createmaponoverlay = function (map) { }; alarmoverlay.prototype.onadd = function() { }; alarmoverlay.prototype.draw = function() { }; return alarmoverlay; });
you should configure requirejs pass in mock google object when unit testing, , pass in real google object when running in production. way, alarmoverlay object not need change in either scenario.
a mock object simulates behavior of object unit can call mock without surprises. in case, mock object need implement maps.overlayview,
perhaps this:
mygoogle.js
define(function() { return { maps: { overlayview: function() {} } } }
then, during testing, map google
module mymodule
, perhaps so:
main.js or page.html
requirejs.config({ paths: { google: '../mocks/mygoogle.js' } });
during production map google module full-fledged google object:
main.js or page.html
requirejs.config({ paths: { google: '[your production google]' } });
now can use same code production , testing:
alarmoverlay.js
define(['jquery','google'], function($, google) { /* reference 'google' anywhere in module */ function alarmoverlay(bounds, alarmnumber, alarmcssclass) { } alarmoverlay.prototype = new google.maps.overlayview(); alarmoverlay.prototype.createmaponoverlay = function (map) { }; alarmoverlay.prototype.onadd = function() { }; alarmoverlay.prototype.draw = function() { }; return alarmoverlay; });
Comments
Post a Comment