Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js-使用supertest测试REST API路由_Node.js_Rest_Supertest - Fatal编程技术网

Node.js-使用supertest测试REST API路由

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

发出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 { 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(`我认为回答这类问题的人必须在同一所大学/办公室:)我认为回答这类问题的人必须在同一所大学/办公室:)