我有一个练习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);
型
型
1条答案
按热度按时间14ifxucb1#
字符串
在调用像
setUpDatabase
这样的异步函数时,请确保使用alphanc关键字和await。