为什么我的打字稿导入不与 sinon 存根

why is my typescript import not stubbing with sinon

我正在尝试存根从外部库导入的方法。我可以使用这种存根方法来处理内部库,但外部库哪里出错了?

示例:

index.ts
import {format} from "date-fns";

export class Index {
    public now(): string {
        return format(new Date(), "Pp");
    }
}
index.test.ts
import {expect} from 'chai';
import * as sinon from "sinon";
import 'mocha';
import {Index} from './index';

describe("index unit tests", async function () {
    let dfns = await import("date-fns");

    it("get should return mock", async function () {
        sinon.stub(dfns, "format").returns("x");
        expect(new Index().now()).to.equal("x");
    });
});

无法从 date-fns 存根格式,因为格式定义为 non-configurable 属性.

(截取自文件:node_modules/date-fns/index.js)

如果你还想要它,你可以使用包装器方法,然后将包装器方法存根。

例如,我创建了包装器 iFormat 来包装文件 index.ts 中的真实格式。

// File index.ts
import { format } from 'date-fns';

export const iFormat = (a: Date, b: string): string => {
  return format(a, b);
};

export default class Index {
  public now(): string {
    return iFormat(new Date(), 'Pp');
  }
}

测试文件:

// File: index.test.ts
import { expect } from 'chai';
import * as sinon from 'sinon';
import 'mocha';
import * as Index from './index';

describe('index unit tests', function () {
    it('get should return mock', function () {
        sinon.stub(Index, 'iFormat').returns('x');
        expect(new Index.default().now()).to.equal('x');

    });
});

当我运行它使用ts-mocha

$ npx ts-mocha index.test.ts


  index unit tests
    ✓ get should return mock


  1 passing (4ms)