How can I mock Webpack's require.context in Jest?

前端 未结 8 803
执念已碎
执念已碎 2020-12-08 09:38

Suppose I have the following module:

var modulesReq = require.context(\'.\', false, /\\.js$/);
modulesReq.keys().forEach(function(module) {
  modulesReq(modu         


        
8条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-12-08 10:21

    Extract the call to a separate module:

    // src/js/lib/bundle-loader.js
    /* istanbul ignore next */
    module.exports = require.context('bundle-loader?lazy!../components/', false, /.*\.vue$/)
    

    Use the new module in the module where you extracted it from:

    // src/js/lib/loader.js
    const loadModule = require('lib/bundle-loader')
    // ...
    

    Create a mock for the newly created bundle-loader module:

    // test/unit/specs/__mocks__/lib/bundle-loader.js
    export default () => () => 'foobar'
    

    Use the mock in your test:

    // test/unit/specs/lib/loader.spec.js
    jest.mock('lib/bundle-loader')
    import Loader from 'lib/loader'
    
    describe('lib/loader', () => {
      describe('Loader', () => {
        it('should load', () => {
          const loader = new Loader('[data-module]')
          expect(loader).toBeInstanceOf(Loader)
        })
      })
    })
    

提交回复
热议问题