首页 > 解决方案 > 模拟一个班级,然后开玩笑地取消模拟它

问题描述

我在 typescript 中有一个 cdk 项目,我正在尝试为第一个 app.ts 编写单元测试。所以下面是它的示例代码 -

    import * as cdk from '@aws-cdk/core';
    export class MyApp extends cdk.App {
      constructor() {
        super();
        const sharedContext = this.node.tryGetContext('shared');
        const myProjectName = sharedContext['projectName'];
        // some more functionality
       //create stack
    }
    }
    
    const app = new MyApp();
    app.synth();

问题是当在我的测试文件中,即 app.test.ts 我正在导入时 -

import { MyApp } from '../app';
import * as cdk from '@aws-cdk/core';
describe('app', () => {
  let mockedcontext: jest.SpyInstance<any, unknown[]>;
  const expectedSharedcontext = {
    projectName: 'exampleSharedContext',
  };
  beforeEach(() => {
    mockedcontext = jest
      .spyOn(cdk.ConstructNode.prototype as any, 'tryGetContext')
      .mockReturnValue(expectedSharedcontext);
    Object.defineProperty(MyApp.prototype, 'sharedContext', { value: expectedSharedcontext });
    new MyApp();
  });
  afterEach(() => {
    jest.resetAllMocks();
  });

  test('constructor', () => {
    expect(mockedcontext).toHaveBeenCalledTimes(1);
  });
});

它也在底部导入新对象的创建,因此我的模拟都没有测试app.ts。知道如何测试 MyApp 类的功能。

标签: typescriptjestjsaws-cdkts-jest

解决方案


推荐阅读