Node.js-使用supertest测试REST API路由
发出post请求时,无法在路由中访问Req.body。如果有人能帮助我度过难关,我将不胜感激。这是我的microservice.test.js文件的屏幕截图。我错过什么了吗Node.js-使用supertest测试REST API路由,node.js,rest,supertest,Node.js,Rest,Supertest,发出post请求时,无法在路由中访问Req.body。如果有人能帮助我度过难关,我将不胜感激。这是我的microservice.test.js文件的屏幕截图。我错过什么了吗 import request from "supertest"; import mongoose from "mongoose"; import config from "../config/env"; import routes from "../server/routes"; import { parseRespon
import request from "supertest";
import mongoose from "mongoose";
import config from "../config/env";
import routes from "../server/routes";
import { parseResponse, doRequest } from "../server/utils/helperFunctions";
const app = express();
app.use("/", routes);
jest.setTimeout(30000);
低于4的expressjs版本包括正文解析中间件
import bodyParser from 'body-parser';
app.use(bodyParser());
示例测试
it('.post should work with data', function (done) {
var app = express();
app.use(bodyParser());
app.post('/', function(req, res){
res.send(req.body.name);
});
request(app)
.post('/')
.send({ name: 'tobi' })
.expect('tobi', done);
})
低于4的expressjs版本包括正文解析中间件
import bodyParser from 'body-parser';
app.use(bodyParser());
示例测试
it('.post should work with data', function (done) {
var app = express();
app.use(bodyParser());
app.post('/', function(req, res){
res.send(req.body.name);
});
request(app)
.post('/')
.send({ name: 'tobi' })
.expect('tobi', done);
})
提供的代码没有提供太多的细节,因为我希望所有请求的处理都在路由处理程序中。使用
supertest
运行测试时,是否存在无法访问正文的问题?或者它根本不起作用。更多的信息将非常有用
如果这是一个supertest
问题,我建议您退房。这里有一个我直接从NPM站点获取的数据,他们在该站点上发布了一些数据和请求主体,然后验证响应主体:
describe('POST /user', function() {
it('user.name should be an case-insensitive match for "john"', function(done) {
request(app)
.post('/user')
.send('name=john') // x-www-form-urlencoded upload
.set('Accept', 'application/json')
.expect(function(res) {
res.body.id = 'some fixed id';
res.body.name = res.body.name.toLowerCase();
})
.expect(200, {
id: 'some fixed id',
name: 'john'
}, done);
});
});
此外,如果您试图测试服务器,您可能应该导入服务器代码,而不是创建新的express实例。例如,在服务器代码中,您将有如下内容:
server.js
const express = require('express');
const app = express();
app.use('/', ...) // middleware/route config
...
module.exports = app;
然后,您的服务器将按如下方式使用此服务器:
index.js
const express = require('express');
const app = express();
app.use('/', ...) // middleware/route config
...
module.exports = app;
const-app=require(“./server”)
常数端口=4000
app.listen({port},()=>{
常数位置=`http://localhost:${port}`
logger.info(`提供的代码没有提供太多的细节,因为我希望所有请求的处理都在您的路由处理程序中。问题是您在使用supertest
运行测试时无法访问正文?还是它根本不起作用。更多信息将非常有用
如果这是一个supertest
问题,我建议退出。下面是一个我直接从NPM网站上获取的问题,他们在那里向请求主体发布一些数据,然后验证响应主体:
describe('POST /user', function() {
it('user.name should be an case-insensitive match for "john"', function(done) {
request(app)
.post('/user')
.send('name=john') // x-www-form-urlencoded upload
.set('Accept', 'application/json')
.expect(function(res) {
res.body.id = 'some fixed id';
res.body.name = res.body.name.toLowerCase();
})
.expect(200, {
id: 'some fixed id',
name: 'john'
}, done);
});
});
此外,如果您试图测试服务器,您可能应该导入服务器代码,而不是创建新的express实例。例如,在服务器代码中,您将有如下内容:
server.js
const express = require('express');
const app = express();
app.use('/', ...) // middleware/route config
...
module.exports = app;
然后,您的服务器将按如下方式使用此服务器:
index.js
const express = require('express');
const app = express();
app.use('/', ...) // middleware/route config
...
module.exports = app;
const-app=require(“./server”)
常数端口=4000
app.listen({port},()=>{
常数位置=`http://localhost:${port}`
logger.info(`我认为回答这类问题的人必须在同一所大学/办公室:)我认为回答这类问题的人必须在同一所大学/办公室:)