【问题标题】:Mock return value of method on mocked ES6 class模拟 ES6 类上的方法的模拟返回值
【发布时间】:2022-11-07 22:36:13
【问题描述】:

在使用 jest 库的MockedClass 模拟 ES6 类时,我正在努力模拟一个方法。

例子:

export default class CalculatorService {
  constructor() {
    // setup stuff
  }

  public add(num1: number, num2: number): number {
    return num1 + num2;
  }
}

以下按预期工作:

import CalculatorService from 'services/calculatorService';
jest.mock('services/calculatorService');
const MockedCalculatorService = CalculatorService as jest.MockedClass<typeof CalculatorService>;

describe('Tests', () => {

    test('Test flow with Calculator service', () => {
        // Arrange

        // Act
        implementation(1,2); // Where CalculatorService is used

        // Assert
        const mockServiceInstance = MockedService.mock.instances[0];
        expect(mockServiceInstance.add).toHaveBeenCalledWith(1,2);
    });
}

但是假设我想模拟 add 以始终返回 5,无论输入如何。

使用jest.Mocked,它的完成方式如下:MockedService.add.mockReturnValue(5),如果我理解正确的话here。但是当我嘲笑一个班级时,我该如何解决呢?

【问题讨论】:

    标签: typescript unit-testing jestjs ts-jest


    【解决方案1】:

    这是我如何模拟课程的粗略想法

    import { mocked } from 'ts-jest/utils';
    import { CalculatorService } from 'services/calculatorService';
    
    jest.mock('services/calculatorService', () => {
      return {
        CalculatorService: jest.fn().mockImplementation(() => {
          return {
            add: () => {},
          };
        })
      };
    });
    
    describe('Tests', () => {
      const MockedCalculatorService = mocked(CalculatorService, true);
    
      beforeEach(() => {
       MockedCalculatorService.mockClear();
      });
    
      it('Test flow with Calculator service', () => {
        const impementingClass = new ImplementingClass();
        expect(MockedCalculatorService).toHaveBeenCalledTimes(1);
    
        impementingClass.implimentation(1,2);
        expect(MockedCalculatorService.add).toHaveBeenCalledWith(1,2)
      });
    
    }
    

    注意 - 使用npm i ts-jest

    【讨论】:

    • 将对此进行测试。不过,对于这种情况,理想情况下,我想模拟每个测试的实现/返回值,而不是一个实现。
    猜你喜欢
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    • 1970-01-01
    • 1970-01-01
    • 2019-03-12
    • 1970-01-01
    相关资源
    最近更新 更多