Как протестирвать приватный статический метод который бросает исключение?

Чтобы протестировать приватный статический метод, который бросает исключение в TypeScript, вам потребуется использовать различные подходы.

Первый подход - использование мок-объектов. Вы можете создать мок-объект для класса, который содержит приватный метод, и замокать этот метод с помощью библиотеки мок-объектов, такой как Sinon.js или Jest. Затем вы можете вызвать метод, который использует приватный метод, и проверить, что он вызывает исключение. Вот пример кода с использованием библиотеки Sinon.js:

import { expect } from 'chai';
import sinon from 'sinon';

class MyClass {
   private static myPrivateMethod() {
      throw new Error('My Error');
   }

   public static myPublicMethod() {
      try {
         MyClass.myPrivateMethod();
      } catch (error) {
         throw new Error(`Caught error: ${error.message}`);
      }
   }
}

describe('MyClass', () => {
   it('should throw an exception when calling myPublicMethod', () => {
      const myPrivateMethodMock = sinon.stub(MyClass, 'myPrivateMethod');
      myPrivateMethodMock.throws(new Error('My Error'));

      expect(() => MyClass.myPublicMethod()).to.throw('Caught error: My Error');

      myPrivateMethodMock.restore();
   });
});

Второй подход - использование рефлексии. TypeScript поддерживает рефлексию, которая позволяет получить доступ к приватным методам и свойствам. Вы можете использовать рефлексию, чтобы вызвать приватный метод напрямую и проверить, вызывает ли он исключение. Вот пример кода, использующего рефлексию:

import { expect } from 'chai';

class MyClass {
   private static myPrivateMethod() {
      throw new Error('My Error');
   }

   public static myPublicMethod() {
      try {
         Reflect.getOwnMetadata('design:returntype', MyClass, 'myPrivateMethod').call(MyClass);
      } catch (error) {
         throw new Error(`Caught error: ${error.message}`);
      }
   }
}

describe('MyClass', () => {
   it('should throw an exception when calling myPublicMethod', () => {
      expect(() => MyClass.myPublicMethod()).to.throw('Caught error: My Error');
   });
});

Оба этих подхода позволяют протестировать приватный статический метод, который бросает исключение в TypeScript. Выбор подхода зависит от ваших предпочтений и используемых инструментов тестирования.