Node.js 如何使用express、jest和supertest修复返回404状态代码而不是200的端点测试

Node.js 如何使用express、jest和supertest修复返回404状态代码而不是200的端点测试,node.js,express,asynchronous,jestjs,supertest,Node.js,Express,Asynchronous,Jestjs,Supertest,我的最终目标是能够创建满足以下语句的测试: 验证对有效URL的请求是否返回200 HTTP状态代码 例如,有效的URL应该是/about page或/jobs,基本上是我在content文件夹中添加的任何目录,其中包含扩展名为/index.md的文件 这是我目前的代码: app.js const readFilePromise=util.promisify(fs.readFile) 应用程序获取('/*',(请求,请求)=>{ readFilePromise(path.join(uu dirna

我的最终目标是能够创建满足以下语句的测试:

验证对有效URL的请求是否返回200 HTTP状态代码

例如,有效的URL应该是
/about page
/jobs
,基本上是我在
content
文件夹中添加的任何目录,其中包含扩展名为
/index.md
的文件

这是我目前的代码:

app.js

const readFilePromise=util.promisify(fs.readFile)
应用程序获取('/*',(请求,请求)=>{
readFilePromise(path.join(uu dirname,'content',req.url)+'/index.md','utf8')
。然后(数据=>{
转换数据(数据,res)
})
.catch(错误=>{
res.status(404).send('页面不存在!')
})
})
const convertData=(数据,分辨率)=>{
const convertedData=md.render(数据)
readFilePromise(path.join(uu dirname,'/template.html'),'utf8')
。然后(数据=>{
data=data.replace(/\{{content\}}/,convertedData)
res.send(数据)
})
.catch(错误=>{
console.log(错误)
})
}
app.listen(3000)
module.exports=app
在阅读之后,它提到

请求是异步的,这意味着您必须能够执行异步测试

因此,我编写了以下测试:

app.test.js

const-app=require('./app.js')
常量请求=超级测试(应用程序)
const supertest=require(‘supertest’)
它('获取测试端点并返回200状态',async done=>{
const res=wait request.get(“/*”)
期望(资源状态)。托比(200)
完成()
})
当我运行测试时,它以404状态失败,而不是返回200状态。我想这可能是因为我的app.js不是异步/等待样式,所以我将app.js改为:

const readFilePromise=util.promisify(fs.readFile)
app.get('/*',async(req,res)=>{
试一试{
等待readFilePromise(path.join(uu dirname,'content',req.url)+'/index.md',utf8')
}捕捉(错误){
res.status(404).send('页面不存在!')
}
试一试{
const convertedData=md.render(数据)
等待readFilePromise(path.join(\uu dirname,/template.html'),'utf8')
data=data.replace(/\{{content\}}/,convertedData)
res.send(数据)
}捕捉(错误){
console.log(错误)
} 
})
app.listen(3000)
module.exports=app
我试着再次运行测试,但仍然失败了404。我认为我在app.test.js中的设置是错误的,但我不确定确切的设置是什么,因为我已经尝试将各种设置用作本文。我该如何解决这个问题


另外,当我尝试在app.js中使用async/await样式访问URL时,我得到一个
ReferenceError:data not defined
错误,但我不确定如何以async/await格式定义
数据。

我在这里解释了如何为测试环境设置应用程序:

您没有提到如何设置数据库环境,请确保您的数据库不是空的。然后提出get请求。但仅仅检查get请求的状态是不够的,因为如果您的db为空,您仍然会得到200

const response = await request(app).get("/route").send().expect(200);

expect(response.body.length).toBeGreaterThan(0)
更好的方法是连接到不同的数据库,先发布数据,然后检查响应

  const response = await request(app).get("/api/tickets").send().expect(200);

  expect(response.body.length).toEqual(2); // if you post two items
此外,在每次测试之前,请确保从
beforeach()中的空数据库开始