Node.js Mocha测试表明,express结果不是json。json验证说是的

Node.js Mocha测试表明,express结果不是json。json验证说是的,node.js,express,mocha.js,Node.js,Express,Mocha.js,我正在使用mocha和supertest来验证我的简单ai端点。它从数据库中检索数组,然后将其添加到对象中,使其成为json对象。当使用postman时,它告诉我头等于“application/json”,如果我验证对象,它也是正确的 但当我运行npmtest命令时,它突然告诉我解析json对象时出现了问题。不太确定为什么会发生这种情况。非常感谢您的帮助 我的终点 const express = require('express'); const router = express.Router(

我正在使用mocha和supertest来验证我的简单ai端点。它从数据库中检索数组,然后将其添加到对象中,使其成为json对象。当使用postman时,它告诉我头等于“application/json”,如果我验证对象,它也是正确的

但当我运行npmtest命令时,它突然告诉我解析json对象时出现了问题。不太确定为什么会发生这种情况。非常感谢您的帮助

我的终点

const express = require('express');
const router = express.Router();
const { check, validationResult } = require('express-validator');
const auth = require('../middleware/auth');

const Level = require('../models/Level');

// @route       GET api/level
// @desc        Get all levels from the level database
// @access      Private
router.get('/', async (req, res) => {
    try {
        let levels = await Level.findAll({ raw: true, nest: true });

        levelsAsJson = { levels: levels };

        console.log(levels);

        res.status(200).json(levelsAsJson);
    } catch (error) {
        console.log(error.message);
        res.status(500).send('Server error');
    }
});

module.exports = router;
我的邮递员回应:

我的单元测试:

const chai = require('chai');
const expect = chai.expect;
const chaiAsPromised = require('chai-as-promised');
var sinon = require('sinon');
const sinonChai = require('sinon-chai');
const request = require('supertest');

const app = require('../../index');

chai.use(chaiAsPromised);
chai.use(sinonChai);

describe('Levels route', () => {
    // test whether the endpoint will respond with a 200
    context('GET /level', () => {
        it('should return all levels from the levels table.', done => {
            request(app)
                .get('/api/level')
                .set('Accept', 'application/json')
                .expect('Content-type', /json/)
                .expect(200, done);
        });
    });
});

您缺少
res.setHeader('Content-Type','application/json')路由器中执行code>。获取
回调

router.get('/', async (req, res) => {
    try {
        let levels = await Level.findAll({ raw: true, nest: true });

        levelsAsJson = { levels: levels };

        console.log(levels);

        res.setHeader('Content-Type', 'application/json');
        res.status(200).json(levelsAsJson);
    } catch (error) {
        console.log(error.message);
        res.status(500).send('Server error');
    }
});

您缺少
res.setHeader('Content-Type','application/json')路由器中执行code>。获取
回调

router.get('/', async (req, res) => {
    try {
        let levels = await Level.findAll({ raw: true, nest: true });

        levelsAsJson = { levels: levels };

        console.log(levels);

        res.setHeader('Content-Type', 'application/json');
        res.status(200).json(levelsAsJson);
    } catch (error) {
        console.log(error.message);
        res.status(500).send('Server error');
    }
});

结果我犯了一个愚蠢的小错误。状态检查后应调用done方法。所以,期望(200,完成);变成.expect(200,done());希望它能帮助将来的任何人得到这个错误。

原来我犯了一个愚蠢的小错误。状态检查后应调用done方法。所以,期望(200,完成);变成.expect(200,done());希望它能帮助将来的任何人得到这个错误。

我实际上将它用作中间件。但在路由器中设置它也不适用于meI,实际上,meI将其用作中间件。但在路由器中设置它对我也不起作用