简体   繁体   English

如何使用 jest 在 typescript 中测试抽象 class?

[英]How to use jest for testing abstract class in typescript?

Hi I trying to test Abstract class using jest.嗨,我试图用玩笑来测试 Abstract class。 But when ever try to do that.但是,当尝试这样做时。 I'm getting the syntax error.我收到语法错误。 I tried using type: module to import cosmos dependencies I got this error adding type:module in package.json我尝试使用 type: module 导入 cosmos 依赖项在 package.json 添加 type:module 时出现此错误

import { Constants, CosmosClient, ErrorResponse, FeedOptions, FeedResponse, ItemResponse, SqlQuerySpec, StatusCodes } from '@azure/cosmos';

/**
 * Abstract class with general CosmosDB utilities and wrappers.
 */
export abstract class AbstractCosmosService {

  // TODO: Cannot be abstract yet: microsoft/TypeScript#34516
  protected static CONNECTION_STRING: string;

  protected static get dbClient(): CosmosClient {
    return new CosmosClient(this.CONNECTION_STRING);
  }

  protected static recordRequestCharge(response: any): void {
    if (typeof response === 'object' && response && response.hasOwnProperty('requestCharge')) {
      // TODO: record request charge somehow
    }
  }

I'm getting the error我收到错误在此处输入图像描述

You can execute the methods with bypass the type check of TSC.您可以绕过 TSC 的类型检查来执行这些方法。 You should use bracket notation instead of using dot notation property accessors.您应该使用括号表示法而不是使用点表示法属性访问器。

Eg例如

index.ts : index.ts

import { CosmosClient } from '@azure/cosmos';

/**
 * Abstract class with general CosmosDB utilities and wrappers.
 */
export abstract class AbstractCosmosService {
  // TODO: Cannot be abstract yet: microsoft/TypeScript#34516
  protected static CONNECTION_STRING: string;

  protected static get dbClient(): CosmosClient {
    return new CosmosClient(this.CONNECTION_STRING);
  }

  protected static recordRequestCharge(response: any): void {
    if (typeof response === 'object' && response && response.hasOwnProperty('requestCharge')) {
      // TODO: record request charge somehow
      console.log('record request charge somehow');
    }
  }
}

index.test.ts : index.test.ts

import { AbstractCosmosService } from './';
import { CosmosClient } from '@azure/cosmos';

jest.mock('@azure/cosmos', () => {
  return { CosmosClient: jest.fn() };
});

describe('62896064', () => {
  describe('#recordRequestCharge', () => {
    it('should pass', () => {
      const logSpy = jest.spyOn(console, 'log');
      const response = { requestCharge: '' };
      AbstractCosmosService['recordRequestCharge'](response);
      expect(logSpy).toBeCalledWith('record request charge somehow');
    });
  });

  describe('#dbClient', () => {
    it('should pass', () => {
      AbstractCosmosService['CONNECTION_STRING'] = 'localhost:5432';
      AbstractCosmosService['dbClient'];
      expect(CosmosClient).toBeCalledWith('localhost:5432');
    });
  });
});

unit test result with coverage report:带有覆盖率报告的单元测试结果:

 PASS  stackoverflow/62896064/index.test.ts (11.586s)
  62896064
    #recordRequestCharge
      ✓ should pass (16ms)
    #dbClient
      ✓ should pass

  console.log
    record request charge somehow

      at CustomConsole.<anonymous> (node_modules/jest-environment-enzyme/node_modules/jest-mock/build/index.js:866:25)

----------|---------|----------|---------|---------|-------------------
File      | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
----------|---------|----------|---------|---------|-------------------
All files |     100 |       80 |     100 |     100 |                   
 index.ts |     100 |       80 |     100 |     100 | 15                
----------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests:       2 passed, 2 total
Snapshots:   0 total
Time:        13.137s

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM