typescript 运行Jest测试并验证结果是否是错误数组?

64jmpszr  于 2023-04-22  发布在  TypeScript
关注(0)|答案(1)|浏览(82)

我试图使用类验证器模块来确认我的对象在使用Map器代码时是有效的。
order.entity.ts

import {
  ArrayMinSize,
  IsArray,
  IsBoolean,
  IsDate,
  IsDateString,
  IsInt,
  IsOptional,
  IsString,
  ValidateNested,
} from 'class-validator';
import { Transform, Type } from 'class-transformer';

export class Order {
  @IsInt()
  @IsOptional()
  OrderId?: number;

  @IsString()
  @IsOptional()
  RetailerName?: string | null;

  @IsString()
  RetailerOrderId: string;

  @IsString()
  @IsOptional()
  Brand?: string | null;
}

我有一个mapper设置如下:data.mapper.ts

import { Order } from './entities/Order.entity';
import { transformAndValidate } from 'class-transformer-validator';

export class OrderMapper {
  public static async toDomainFromMessage(raw: any): Promise<Order> {
    const order = new Order();
    order.RetailerName =
      raw.source ??
      (() => {
        new Error('Retailer Name is missing');
      })();
    order.RetailerOrderId = raw.externalOrderId
      ? raw.externalOrderId.toString()
      : null;

    const result = await transformAndValidate(Order, order)
      .then((orderObject: Order) => {
        return orderObject;
      })
      .catch((err) => {
        throw err;
      });
    return result;
  }
}

我通过传入这样的对象进行测试

const order = {
  orderId: 12345678,
  shipping_country_code: 'US',
  orderTypes: [
    {
      orderTypeLabel: 'Wholesale',
      orderTypeId: '14',
    },
  ],
};

由于缺少ExternalOrder字段,因此它会抛出ValidationError类型的错误数组。
我已经尝试使用此代码捕获错误,但无法确定需要使用什么expect命令来验证捕获的错误变量中是否有一些ValidationError对象

try {
  const order = await OrderMapper.toDomainFromMessage(order);
} catch (e) {
  console.log(e);
}
ulmd4ohb

ulmd4ohb1#

您可以将Jest expect函数与自定义匹配器一起使用,以验证捕获的错误是否是class-validator模块中ValidationError类的示例,以及它是否包含预期数量的错误。
将此代码添加到catch块下。

expect(e).toHaveLength(length);
e.forEach((error) => {
  expect(error).toBeInstanceOf(ValidationError);
});

相关问题