javascript - TypeError: ES-moduler kan inte stubbas - Sinon


Stubbar med Sinon returnerar ett fel för namngivna funktionsexporter och det fungerar som förväntat för standard funktionsexporter.

I koden nedan orsakar foo1Stub=Sinon.stub(foos1, "foo1"); ett fel TypeError: ES Modules cannot be stubbed när tester körs med kommandot npm test

package.json

    {
      ....
      ....
      "scripts": {
         "test": "npx mocha --exit --timeout 0 'tests/**/*.test.js'",
      },
      "type": "module",
      ....
      ....
    }

foo1.ts (export av namngiven funktion)

    export async function foo1() {
      return {};
    }

foo2.ts (standardfunktionsexport)

    async function foo2() {
      return {};
    }
    export default { foo2 }

bar.ts

    import * as foos1 from './foo1.ts';
    import {default as foos2} from './foo2.ts';

    async function bar() {
        const result1 = await foos1.foo1();
        const result2 = await foos2.foo2();
        return {result1, resutl2};
    }

bar.test.ts

    import * as foos1 from './foo1.ts';
    import {default as foos2} from './foo2.ts';
    import {default as bars} from './bar.ts';

    describe("bar tests", function() {
       const foo1Stub, foo2Stub;

       this.afterEach(() => {
           foo1Stub.restore();
           foo2Stub.restore();
       });

      it("should success", async function () {
         foo2Stub = Sinon.stub(foos2, "foo2");
         foo1Stub = Sinon.stub(foos1, "foo1"); // TypeError: ES Modules cannot be stubbed 

        await bars.bar();
      }
    }

Relaterade artiklar