Проверка валидации Mongoose с помощью Jest Ожидайте. - PullRequest
0 голосов
/ 16 мая 2019

Я хотел бы создать тест, чтобы убедиться, что в случае пропуска обязательного поля служба выдает ошибку.

Это моя схема:

export const UserSchema = new Schema({
    firstName: String,
    lastName: String,
    email: { type: String, required: true },
    passwordHash: String
});

И это моеservice:

@Injectable()
export class UsersService {
    constructor(@InjectModel('User') private readonly userModel: Model<User>) {}

    async create(createUserDto): Promise<User> {
        const createdUser = new this.userModel(createUserDto);
        return await createdUser.save();
    }
}

И в моем тесте сервиса у меня есть такой случай:

it('Validates required email', async () => {
        const dto = {
            firstName: 'Test',
            lastName: 'User',
            passwordHash: '123ABC'
        };

        expect( async () => {
            return await service.create(dto);
        }).toThrowError(/required/);

    });

Но тест не пройден, с таким сообщением:

    Expected the function to throw an error matching:
      /required/
    But it didn't throw anything.

Может кто-нибудьпомогите мне?

Ответы [ 2 ]

0 голосов
/ 17 мая 2019

Ответь сам.Хитрость заключается в том, чтобы использовать wait.assertions и попробовать catch:

expect.assertions(1);
try {
    await service.create(dto);
} catch (error) {
    expect(error.message).toMatch(/required/);
}
0 голосов
/ 16 мая 2019

Я думаю, что вы должны изменить свой тестовый пример следующим образом:

it('Validates required email', async () => {
        const dto = {
            firstName: 'Test',
            lastName: 'User',
            passwordHash: '123ABC'
        };

        await expect(service.create(dto)).rejects.toThrowError(ValidationError); //probably will be error of this type

    });
...