Я пытаюсь сделать некоторые интеграционные тесты, используя 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
}