проверки в классе не работают с набором - PullRequest
0 голосов
/ 12 июля 2020

Я изучаю OO JS и хочу использовать паттерны геттеры и сеттеры (для изучения), но я не понимаю, почему мой тест не улавливает ошибка, когда я использую набор . Если я использую без set , просто только метод, он работает.

В моем тесте пустое поле проверяется, и этого не ожидается, правильным является возврат ошибки пустого поля

Мой класс:

export default class Category {
  constructor(name) {
    this._name = name;
  }

  set name(name) {
    if (isEmpty(name) || isNull(name))
      throw new Error(`category field needs to be filled`);
    this._name = name;
  }
  get name() {
    return this._name;
  }

}

categoryDAO

import Category from "../models/Category.js";

export default class CategoryDAO {
  constructor() {
    this._list = [];
  }
  add(category) {
    if (!(category instanceof Category)) {
      throw new Error("the object is not of type category");
    }

    if (this._list.some((c) => c.name === category.name)) {
      throw new Error("category has been created");
    }
    this._list.push(category);
  }
}

test

try {
  const categoryDAO = new CategoryDAO();
  const category1 = new Category("Devops");
  const category2 = new Category("Devops");
  categoryDAO.add(category1);
  categoryDAO.add(category2);
  console.log(`saved ${category1.name}`);
  console.log(`saved ${category2.name}`);
} catch (err) {
  console.log(`WRG ${err}`);
}

try {
  const categoryDAO = new CategoryDAO();
  const category1 = new Category(" ");
  categoryDAO.add(category1);
  console.log(`saved ${category1.name}`);
} catch (err) {
  console.log(`WRG ${err}`);
}

проверить. js

export const mailFormat = /^([\w-]\.?)+@([\w-]+\.)+([A-Za-z]{2,4})+$/g;

export const notEmpty = (value) => (value === " " ? false : true);

export const isEmpty = (value) => !notEmpty(value);

export const isNull = (value) => value === null;

export const maxLength = (length) => (value) => value.length < length;

Спасибо за любую помощь

Ответы [ 2 ]

0 голосов
/ 12 июля 2020

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

class Category {
  constructor(name) {
    this._name = name;
  }
  set name(name) {
    if (name.length==0 )
      throw new Error(`category field needs to be filled`);
    this._name = name;
  }
  get name() {
    return this._name;
  }

}

const category1 = new Category();
category1.name=""
0 голосов
/ 12 июля 2020

Ваш конструктор устанавливает _name без использования вашей функции set, поэтому ваша проверка не запускается. Попробуйте вместо этого этот конструктор:

export default class Category {
  constructor(name) {
    this.name = name;
  }
  [...]
}

Я также думаю, что вы можете улучшить свои функции «isEmpty ()» и «isNull ()». Взгляните на эту ветку .

Вот полная скрипка вашего приложения.

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