Написание теста для проверки Джой - PullRequest
0 голосов
/ 11 марта 2020

У меня есть следующая модель:

const mongoose = require("mongoose");
const Joi = require("@hapi/joi");

const activitySchema = new mongoose.Schema({
  title: {
    type: String,
    maxlength: 255,
    minlength: 3,
    required: true
  }
});

const Activity = mongoose.model("Activity", activitySchema);

function validateActivity(activity) {
  const schema = Joi.object({
    title: Joi.string().min(3).max(255).required()
  });
  return schema.validate(activity)
}

module.exports.Activity = Activity;
module.exports.validate = validateActivity;

И я пишу модульный тест для функции validateActivity. Я не уверен в том, что лучше всего писать эти тесты.

Пока я придумал:

const {validateActivity} = require("../../models/activity");

describe("activity model", () => {

  let mockActivity;

  beforeEach(() => {
    mockActivity = {
      title: "123"
    }
  });

  it("should return an error if no title is provided", () => {
    delete mockActivity.title;
    const result = validateActivity(mockActivity);
    expect(result.error.details[0].type).toMatch(/any.required/);
  });

  it("should return an error if title is not a string", () => {
    mockActivity.title = { test: "test" };
    const result = validateActivity(mockActivity);
    expect(result.error.details[0].type).toMatch(/string.base/);
  });

  it("should return an error if title is less than 3 chars", () => {
    mockActivity.title = "12";
    const result = validateActivity(mockActivity);
    expect(result.error.details[0].type).toMatch(/string.min/);
  });

  it("should return an error if title is more than 255 chars", () => {
    mockActivity.title = Array(258).join("a");
    const result = validateActivity(mockActivity);
    expect(result.error.details[0].type).toMatch(/string.max/);
  });

});

Так что, как только я добавлю несколько полей в свою модель, тестирование будет довольно повторяющийся. Нужно ли писать тест для каждого сценария?

Ответы [ 2 ]

1 голос
/ 12 марта 2020

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

Теперь представьте, что у вас есть схема и у вас нет тестов. Например, если вы удалите условие max(255), все ваши тесты пройдут (поскольку у вас их нет), и ваши клиенты смогут вставить данные, которые длиннее 255, что, очевидно, будет неправильным.

Я не вижу ничего плохого в том, что ты делаешь. Вы можете рассмотреть группирование, когда у вас есть несколько полей. В двух словах, вам следует тщательно протестировать свою схему, если целостность данных для вас очень важна.

0 голосов
/ 11 марта 2020

После просмотра этого комментария { ссылка } кажется, что не имеет смысла проверять каждый сценарий, поскольку мы можем верить, что функция проверки уже была протестирована в Joi.

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