Ложный класс TypeScript с приватным конструктором с использованием Jest - PullRequest
0 голосов
/ 04 марта 2020

Итак, я новичок ie в мире TypeScript и Jest. Я упустил часть своих примеров кода для простоты.

По сути, у меня есть объект User, который имеет приватный конструктор, потому что я использую фабричный метод stati c в этом классе , Этот фабричный метод возвращает экземпляр User при успехе или список UserCreationFailure с, если какое-либо предоставленное поле недопустимо.

Моя User сущность выглядит следующим образом (обратите внимание, что это просто упрощенная псевдокод):

export class User {
    // fields

    private constructor(name: string, email: string, password: string) {
      this.name = name;
      this.email = email;
      this.password = password;
    }

    public static create(name: string, email: string, password: string) : UserCreationFailure[], User {
        // validations

        return failures.length (failures : new User(name, email, password);
    }
}

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

it('should create user when all provided fields are valid', () => {
    // arrange
    // mock User class calling the private constructor
    const mockUser = MockUserClass('Bruno', 'bruno@geosapiens.com.br', '12345678');
    // act
    const result = User.create('Bruno', 'bruno@geosapiens.com.br', '12345678');
    // assert
    expect(result).toStrictEqual(mockUser);
});

Но похоже, что я не могу использовать Jest для насмешки над классом User, у которого есть приватный конструктор. Я хочу, чтобы этот фиктивный пользовательский экземпляр в фазе аранжировки моего теста сравнивал его с возвращенным пользовательским экземпляром фабричным методом.

Итак, мой вопрос: есть ли способ использовать Желаете издеваться над классом TypeScript с помощью частного конструктора, передавая ему параметры?

Я взглянул на документацию Jest о имитациях, но я ничего не нашел об этом конкретном c сценарии.

Спасибо за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...