[英]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
}
}
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.