为什么我的打字稿导入不与 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)
我正在尝试存根从外部库导入的方法。我可以使用这种存根方法来处理内部库,但外部库哪里出错了?
示例:
index.tsimport {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)