How to mock dependencies for unit tests with ES6 Modules

后端 未结 5 1310
一整个雨季
一整个雨季 2020-12-02 11:58

I\'m trying to fiddle with Ecmascript 6 modules using webpack + traceur to transpile to ES5 CommonJS, but I\'m having trouble successfully unit testing them.

I tried

5条回答
  •  -上瘾入骨i
    2020-12-02 12:34

    I've started employing the import * as obj style within my tests, which imports all exports from a module as properties of an object which can then be mocked. I find this to be a lot cleaner than using something like rewire or proxyquire or any similar technique.

    I can't speak for traceur which was the framework used in the question, but I've found this to work with my setup of Karma, Jasmine, and Babel, and I'm posting it here as this seems to be the most popular question of this type.

    I've used this strategy most often when needing to mock Redux actions. Here's a short example:

    import * as exports from 'module-you-want-to-mock';
    import SystemUnderTest from 'module-that-uses-above-module';
    
    describe('your module', () => {
      beforeEach(() => {
        spyOn(exports, 'someNamedExport');  // mock a named export
        spyOn(exports, 'default');          // mock the default export
      });
      // ... now the above functions are mocked
    });
    

提交回复
热议问题