有一个API端点需要使用Jest进行集成测试。
这里是端点:http://localhost/universities/ucla/class/2013/studentalis/johndoe
。请求是一个put请求,它在Postman上返回201。
当我测试它时:
const express = require("express");
const request = require("supertest");
const updateStudentRoute= require('../handlers/updateStudent');
const app = express();
app.use(express.json());
app.use('/universities/ucla/class/2013/studentalis/johndoe', updateStudentRoute);
describe('Update Student Details in Databse', () => {
it('Update Student Details in Database', async() => {
const updateStudentRequestBody = require('./updateStudentRequestBody');
const response = await request(app).put(`universities/ucla/class/2013/studentalis/johndoe`)
.send(createInstanceRequestBody);
expect(response.statusCode).toBe(201);
});
});
字符串
测试返回超时,因为它在updateStudent.js文件中得到了一个错误。在其中,它无法解析url参数:
function getQuery(req, studentid, id) {
return {
universityName: req.params.universityName.toString(),
class: req.params.class.toString(),
studentAlias: req.params.studentAlias.toString()
};
}
型
TypeError:无法读取未定义的属性(阅读“toString”)
226 | return {
> 227 | universityName: req.params.universityName.toString(),
| ^
228 | class: req.params.class.toString(),
229 | studentAlias: req.params.studentAlias.toString()
型
当我调试时,req
是一个对象,req.params
是空的,因此req.params.universityName.toString()
是undefined
。所以我的猜测是我设置url参数的方式是不正确的。有什么关于语法的线索吗?
1条答案
按热度按时间vsikbqxv1#
req.params
肯定是空的,因为你没有指定任何路由参数。路由参数是命名的URL段,用于捕获在URL中指定的值。捕获的值填充在
req.params
对象中,路径中指定的路由参数的名称作为其各自的键。让我们看看如何定义,在你的
server.js
或index.js
简单地指定路由参数的路径的路由如下所示.例如:/path/:name
这里的名称是路由参数字符串
还有一件事,你正在使用
app.use
而不是使用app.put
,因为app.use()
旨在将中间件绑定到你的应用程序。到目前为止,您已经对路由参数有了一个概念。让我们看看如何测试它们
在您的
test
js中型
每次都传递
app
示例是不必要的,如果你正在测试同一个主机,你可以简单地重新分配初始化url
的请求变量,每个request.VERB()
调用都会创建一个新的Test。最后不要忘记发送
response
代码201
,因为默认情况下所有端点的快速应答都是200