假设我在Node.js的typescript中使用auth0
我想测试这个类:ClassToTest.ts
import { AuthenticationClient, AuthenticationClientOptions } from 'auth0';
export class ClassToTest {
public static getClient(): AuthenticationClient {
let options = {
domain: global.myConfig.DOMAIN,
clientId: global.myConfig.CLIENT,
clientSecret: global.myConfig.SECRET
} as AuthenticationClientOptions;
let auth0 = new AuthenticationClient(options);
return auth0;
}
}
export default ClassToTest;
现在我想写一个单元测试,确认正确的值被传递到options
。
我正在尝试像
import { expect } from "chai";
import * as sinon from 'sinon';
import ClassToTest from "./ClassToTest";
import { AuthenticationClient, AuthenticationClientOptions } from "auth0";
describe("ClassToTest", () => {
beforeEach(() => {
global.myConfig.DOMAIN = 'someValue';
});
afterEach(() => {
sinon.restore();
});
it("uses right options", async function () {
let usedOptions: AuthenticationClientOptions;
sinon.stub(AuthenticationClient.prototype, 'constructor')
.callsFake((opts: AuthenticationClientOptions) => {
usedOptions = opts;
});
expect(usedOptions.domain).to.equal('someValue');
});
})
这给了我:
错误TS2345:“constructor”类型的参数不能分配给“keyof AuthenticationClient”类型的参数。
1条答案
按热度按时间gudnpqoy1#
我们不能像这样stub JS类的
constructor
,参见issues/1892。一种解决方案是使用proxyquire来消除
auth0
模块及其AuthenticationClient
类。此外,我们可以使用.getCall(n).args
来获取第n次调用的存根参数。例如
classToTest.ts
:auth0.ts
:classToTest.test.ts
: