mongodb TypeError:执行测试脚本时无法读取未定义的属性

yzuktlbb  于 2023-11-17  发布在  Go
关注(0)|答案(1)|浏览(133)

我有一个练习M(ongo)ERN堆栈问题集,当我运行test.js文件时,我一直遇到这个错误,即使GET路由器似乎工作正常。

const request = require("supertest");
const app = require("../src/app");
const Students = require("../src/mongoose/models/students");
const { students, students2, setUpDatabase } = require("./utils/testDB");
setUpDatabase;
//setting up mock data before each test
beforeEach(setUpDatabase);

//fetching all the data
test("Fetch all data - students", async () => {
  const response = await request(app).get("/students").expect(200);
  expect(response.body.type).toBe("Ok");
  // expect(response.body.students.length).toBe(9);
  for (let i = 0; i < students.length; i++) {
    expect(response.body.students[i].student_name).toBe(
      students[i].student_name
    );
    expect(response.body.students[i].roll_number).toBe(students[i].roll_number);
    expect(response.body.students[i].subject1).toBe(students[i].subject1);
    expect(response.body.students[i].subject2).toBe(students[i].subject2);
    expect(response.body.students[i].subject3).toBe(students[i].subject3);
    expect(response.body.students[i].marks_obtained_for_300).toBe(
      students[i].marks_obtained_for_300
    );
  }
});

字符串
这是代码的测试用例设置。
'Students'是mongoose模型,'setUpDatabase'函数将testDB.js中的示例数据(json)加载到localhost mongo服务器,然后开始执行测试。

const express = require("express");
const Student = require('../mongoose/models/students')

//setting up the request router
const insightsRouter = express.Router();

insightsRouter.get('/students' , async (req,res) => {
    const data = await Student.find();
    res.status(200).json({type: "Ok" , requests: data});
    
})


这是我为get请求编写的路由器。
x1c 0d1x的数据
这是我在运行test.js文件时得到的错误
如果有人能告诉我为什么会发生这种情况,我将不胜感激。谢谢!
此外,如果有人有兴趣解决这个问题集的乐趣(有两个节点和达到部分),请随时让我知道,所以我可以分享链接。

**EDIT 1:**关于使用await关键字

//setting up mock data before each test
beforeEach(setUpDatabase);


Await对设置数据库没有影响,请在下面找到引用的函数;

const setUpDatabase = async () => {
    await Students.deleteMany();
    for (let i = 0 ; i < students.length ; i++)
        await Students(students[i]).save();
}

编辑2:

分享数据库设置的图片,以便更好地理解setupDatabase函数;

编辑3:

遵循第一种解决方案,但问题仍然存在

beforeEach(async () => await setUpDatabase());


而不是

beforeEach(setUpDatabase);


14ifxucb

14ifxucb1#

beforeEach(async () => await setUpDatabase());

字符串
在调用像setUpDatabase这样的异步函数时,请确保使用alphanc关键字和await。

相关问题