我已经为mangopay2-nodejs-sdk创建了一个模拟文件,以便为我的Jest测试模拟支付失败:
// __mocks__/mangopay2-nodejs-sdk.ts
import BaseMangoPay from 'mangopay2-nodejs-sdk';
export default class MangoPay extends BaseMangoPay {
static __willFail: boolean = false;
constructor(config: BaseMangoPay.Config) {
super(config);
// Mocked stuff.
this.CardPreAuthorizations = {
create: (
data: cardPreAuthorization.CreateCardPreAuthorization,
): Promise<cardPreAuthorization.CardPreAuthorizationData> => Promise.resolve({
...data,
Id: '1337',
Status: MangoPay.__willFail ? 'FAILED' : 'SUCCEEDED',
}),
};
}
}注意:原始导入是一个必须使用配置实例化才能正常工作的类。
我添加了一个额外的__willFail静态属性,使我的模拟在我想要的测试中失败:
import MangoPay from 'mangopay2-nodejs-sdk';
describe('payment failures', () => {
beforeEach(() => {
MangoPay.__willFail = true;
});
afterAll(() => {
MangoPay.__willFail = false;
});
// The tests.
});这一切都运行得很好。但是,typescript不能识别我模拟的类的__willFail额外静态属性:
Property '__willFail' does not exist on type 'typeof MangoPay'.ts(2339)我当然预料到了这个错误,但我不知道如何解决它。
我找到了类似的答案:https://stackoverflow.com/a/53222290/1731473
但这适用于导入的变量。
我如何应用这种方法来使Typescript与我的额外静态属性一起工作?
发布于 2021-01-18 16:03:05
this answer中描述的方法适用于这种情况。类型断言需要有一个单独的类型导入:
import MangoPay from 'mangopay2-nodejs-sdk';
import MockMangoPay from '.../__mocks__/mangopay2-nodejs-sdk';
...
(MangoPay as typeof MockMangoPay).__willFail = true;否则,需要禁用类型安全,这对于测试中的一次性使用是可以接受的:
(MangoPay as any).__willFail = true;https://stackoverflow.com/questions/65749856
复制相似问题