我正在尝试使用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);
在这种情况下,我正在检查属性是否存在并且不起作用。
编辑:
这是测试有效的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
}