首页 > 解决方案 > 获取带有超测解析问题的请求

问题描述

我正在使用 supertest 来测试对 mLab 应用程序的获取请求。如果我与邮递员进行常规 GET 请求,我会收到以下信息:

{"_id":"5b169a9951573c50d9682d52","text":"First test note","title":"Test1"}

但是在测试中收到的响应在每个引用之前添加了斜杠:

{\\"_id\\":\\"5b169a9951573c50d9682d52\\",\\"text\\":\\"First test note\\",\\"title\\":\\"Test1\\"}

这是我的测试文件:

const server = require("../../app/server");

const request = require("supertest")(server);

describe("routes: index", () => {

  test("should respond as expected", async() => {

    const app = request("http://localhost:8000");

    const response = await app.get("/notes/5b169a9951573c50d9682d52");

    expect(response).toEqual("First test note");

    expect(response).toEqual("Test1");

  });

});

这是我的服务器

const express = require('express'); // node module 
const MongoClient = require('mongodb').MongoClient;
const bodyParser = require('body-parser');
const db = require('./config/db');

const app = express();

const port = process.env.PORT || 8000;

app.use(bodyParser.urlencoded({
  extended: true
}));

MongoClient.connect(db.testUrl, (err, database) => {
  if (err) return console.log(err)
  require('./routes')(app, database);
  app.listen(port, () => {
    console.log('We are live on ' + port);
    console.log(process.env.PORT);
  });
})

module.exports = app;

标签: javascriptexpressjestjssupertest

解决方案


我自己并没有使用过 supertest,但是简要查看您的代码和文档会立即发现几个问题。

首先,您看到的是您的测试框架向您报告的内容——它是 json 对象的字符串表示形式。它是正确的。

不正确的是您尝​​试处理响应的方式。检查文档:

https://www.npmjs.com/package/supertest

我认为,您可以通过 1) 设置预期类型 2) 并访问响应的主体成员来解决问题

const response = await app.get("/notes/5b169a9951573c50d9682d52").set('Accept', 'application/json');

expect(response.body.text).toEqual("First test note");

我希望,这行得通。


推荐阅读