Search code examples
unit-testingnpmjestjs

Worker from imported NPM module causing jest tests to fail


I installed browser-image-compression which, as part of its functionality, creates a Worker. Now when I run jest tests, I get the following error:

Test suite failed to run

ReferenceError: Worker is not defined

There are no tests connected to the function which uses browser-image-compression.

The scripts section in package.json has the following two lines

"test": "react-scripts test",
"test:ci": "cross-env CI=true react-scripts test"

Oh, and I have a file for setting up tests. Should I mock Worker in here?

import { configure } from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
import '@domain/yup';

configure({
  adapter: new Adapter()
});

global.fetch = require('jest-fetch-mock');

Solution

  • Late in responding to this but it could help others - but following this comment helped me with this issue.

    If you add the following to its own file - I have mine within the same dir as the setupTests file named workerMock.js:

    export default class Worker {
      constructor(stringUrl) {
        this.url = stringUrl;
        this.onmessage = () => {};
      }
    
      postMessage(msg) {
        this.onmessage(msg);
      }
    }
    

    Then import that Worker file into your test setup file and add window.Worker = Worker. Your setup file may look like:

    import { configure } from 'enzyme';
    import Adapter from 'enzyme-adapter-react-16';
    import '@domain/yup';
    
    import Worker from 'path-to-your-worker-file-above';
    
    configure({
      adapter: new Adapter()
    });
    
    global.fetch = require('jest-fetch-mock');
    
    window.Worker = Worker;
    

    Hope this helps