使用Jest模拟带有私有构造函数的TypeScript类

时间:2020-03-04 16:40:41

标签: javascript typescript unit-testing jestjs

所以,我是TypeScript和Jest世界的新手。为了简单起见,我省略了部分代码示例。

基本上,我有一个具有私有构造函数的User实体,因为我在此类中使用了静态工厂方法。成功时,此工厂方法将返回一个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类。我希望在测试的安排阶段将此模拟的用户实例与工厂方法将其与返回的用户实例进行比较。

所以,我的问题是:是否可以使用Jest模拟带有私有构造函数的TypeScript类,并向其传递参数?

我看了一下关于模拟的Jest文档,但是我没有找到有关此特定场景的任何信息。

感谢您的帮助。

0 个答案:

没有答案