Разве тест для jest пользовательский класс проверки (class-validator) и его сообщение? - PullRequest
0 голосов
/ 24 января 2020

Я работаю над проектом nodeJs, используя машинопись. Здесь я использую класс-валидатор для проверки входных данных и использую jest для запуска модульного теста.

Однако я не уверен, как я могу проверить настроенное сообщение об ошибке. Я видел множество функций для использования, но почти ничего для класса.

Вот сообщение об ошибке

Matcher error: received value must be a function

Received has type:  string
Received has value: "1"

Вот мой код

unit_test.ts

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false">
<div class="snippet-code">
<pre class="snippet-code-html lang-html prettyprint-override"><code>  describe("GET: search/api", () => {
      class MyClass {
       @IsDefined()
       @Validate(DateConditionCheck, {
      message: 'Please check your date input!'
    })
       dd: number;
    };

    const model: any = new MyClass ();

    model.dd = 1;

    it('should throw an error message when date input is incorrect', async () => {
      return validate(model).then(errors => {
         expect(errors.length).toBe(1);
         expect(model.dd).toThrow('Date condition seems wrong!');
     });
   });
 });

dateconditioncheck.ts

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false">
<div class="snippet-code">
<pre class="snippet-code-html lang-html prettyprint-override"><code>    import {
      IsDefined,
      IsBoolean,
      IsString,
      IsEmail,
      IsNumberString,
      IsAlphanumeric,
      IsNotEmpty,
      MaxLength,
      MinLength,
      IsNumber,
      IsEnum,
      IsOptional,
      Max,
      Min,
      Length,
      Matches,
      Validate,
      ValidatorConstraint,
      ValidatorConstraintInterface,
      ValidationArguments,
      registerDecorator,
      ValidationOptions
    } from 'class-validator'
    import * as moment from 'moment'

    /**
     * Custom validator
     *
     */
    @ValidatorConstraint({ name: 'dateConditionCheck', async: false })
    export class DateConditionCheck implements ValidatorConstraintInterface {
      validate(text: any, args: ValidationArguments) {
        const jsondata = JSON.parse(JSON.stringify(args.object))
        if (args.property === 'dd') {
          return moment(Number(jsondata.yyyy) + '-' + Number(jsondata.mm) + '-' + Number(jsondata.dd), 'YYYYMMDD').isValid()
        }

        if (args.property === 'dd2') {
          return moment(
            Number(jsondata.yyyy2) + '-' + Number(jsondata.mm2) + '-' + Number(jsondata.dd2),
            'YYYYMMDD'
          ).isValid()
        }
        return true
      }

      defaultMessage(args: ValidationArguments) {
        return 'Please check your date input!'
      }
    }

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация , Цените все ваши подсказки!

...