在NodeJS中处理MongooseArray时如何测试代码

时间:2019-10-27 11:37:58

标签: javascript node.js mongoose supertest

我正在尝试使用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
    }

0 个答案:

没有答案