首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Jest让typescript处理模拟的ES6类额外的静态属性?

如何使用Jest让typescript处理模拟的ES6类额外的静态属性?
EN

Stack Overflow用户
提问于 2021-01-16 20:51:31
回答 1查看 62关注 0票数 0

我已经为mangopay2-nodejs-sdk创建了一个模拟文件,以便为我的Jest测试模拟支付失败:

代码语言:javascript
复制
// __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静态属性,使我的模拟在我想要的测试中失败:

代码语言:javascript
复制
import MangoPay from 'mangopay2-nodejs-sdk';

describe('payment failures', () => {
  beforeEach(() => {
    MangoPay.__willFail = true;
  });
  afterAll(() => {
    MangoPay.__willFail = false;
  });

  // The tests.
});

这一切都运行得很好。但是,typescript不能识别我模拟的类的__willFail额外静态属性:

代码语言:javascript
复制
Property '__willFail' does not exist on type 'typeof MangoPay'.ts(2339)

我当然预料到了这个错误,但我不知道如何解决它。

我找到了类似的答案:https://stackoverflow.com/a/53222290/1731473

但这适用于导入的变量。

我如何应用这种方法来使Typescript与我的额外静态属性一起工作?

EN

回答 1

Stack Overflow用户

发布于 2021-01-18 16:03:05

this answer中描述的方法适用于这种情况。类型断言需要有一个单独的类型导入:

代码语言:javascript
复制
import MangoPay from 'mangopay2-nodejs-sdk';
import MockMangoPay from '.../__mocks__/mangopay2-nodejs-sdk'; 
...    
(MangoPay as typeof MockMangoPay).__willFail = true;

否则,需要禁用类型安全,这对于测试中的一次性使用是可以接受的:

代码语言:javascript
复制
(MangoPay as any).__willFail = true;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65749856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档