I have a very simple React mixin which uses jQuery to trigger an event
MyMixin = {
trackStructEvent: function () {
args = Array.prototype.slice.call(arguments);
$('body').trigger('myEvent', args);
}
module.exports = MyMixin
This is imported into the main site as part of a new set of components using browserify. As the main site holding these components will always include jQuery, I don't want to require jQuery with browserify, as it will be duplicated.
This isn't an issue in terms of behaviour - however it causes problems when running jest to unit test the components using this mixin throwing the error.
ReferenceError: $ is not defined
I know I can fix this by including jQuery through browserify, but that will load 2 copies into my site.
Is there any way in jest to tell my react component that jQuery already exists on the window and not to worry about it?
I have a similar problem but I think where i've got to so far solves your problem. You need to use require inside your react files to define jQuery under $
var $ = require('jquery');
MyMixin = {
trackStructEvent: function () {
args = Array.prototype.slice.call(arguments);
$('body').trigger('myEvent', args);
}
module.exports = MyMixin
You then need to tell jest not to mock jquery
jest.dontMock('jquery')
Then your jest unit tests should pass (assuming they aren't verifying things that jQuery is doing - this is where my tests are falling over).
You also need to tell browserify that jQuery is external then the result will be that all your references to $ have been defined, the jquery library is loaded for testing but is not included in your browserify bundle. (use browserify-shim)