Как проверить код при работе с MongooseArray в NodeJS - PullRequest
1 голос
/ 27 октября 2019

Я пытаюсь сделать некоторые интеграционные тесты, используя Supertest. Моя схема объекта содержит массив:

const schema = new mongoose.Schema({
  name: {
    type: String,
    required: true,
    minlength: 3,
    maxlength: 50
  },
  tags: {
      type: Array,
      lowercase: true
   }
});

Я использую Mongoose, и при выполнении моих тестов я всегда сталкиваюсь с этой проблемой при получении MongooseArray вместо Array, и я не уверен, как с этим справиться.

 - Expected value
    + Received value

    - CoreMongooseArray [
    + Array [
        "tag1",
      ]

Что я могу сделать, чтобы всегда получить Массив?
Где мне вносить изменения? В моем коде или тесте?

Вот пример (тест), когда я использую lean, который работает:

    await exec();

    const updatedCategory = await Category.findById(category._id).lean();

    expect(updatedCategory.name).toBe(name);
    expect(updatedCategory.tags).toEqual(tags);

А вот тот, который не работает:

    const res = await exec();

    expect(res.body).toHaveProperty('_id', category._id.toHexString());
    expect(res.body).toHaveProperty('name', category.name);
    expect(res.body).toHaveProperty('tags', category.tags);

В этом случае я проверяю, существует ли свойство и не работает ли оно.

edit:

Вот функция exec () для теста, который работает (маршрут PUT):

const exec = async () => {
    return await request(app)
      .put('/api/categories/' + id)
      .set('x-auth-token', token)
      .send({ name: name, tags: tags });
  }

Вот функция exec () для теста, который не прошел (УДАЛИТЬ маршрут):

const exec = async () => {
    return await request(app)
      .delete('/api/categories/' + id)
      .set('x-auth-token', token)
      .send();
  }

edit3:

Вот результат при отображении res.body наконсоль:

{
      "_id": "5db58e63fa9c143794484eea",
      "tags": [
        "tag1"
      ],
      "name": "category1",
      "__v": 0
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...