node.js - Mocha测试说express结果不是json。 json 验证说它是

标签 node.js express mocha.js

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

但是当我运行 npm test 命令时,它突然告诉我解析 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;

我的 postman 回复: enter image description here

enter image description here

我的单元测试:

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);
        });
    });
});

最佳答案

您的 router.get 回调中缺少 res.setHeader('Content-Type', 'application/json');

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');
    }
});

关于node.js - Mocha测试说express结果不是json。 json 验证说它是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57599420/

相关文章:

javascript - 如何获取 limit 和降序 created_At 返回的项目索引

node.js - 在WebStorm中使用supertest产生 'Argument type is not assignable to parameter type'和 'Unresolved function or method'

JavaScript 标准样式无法识别 Mocha

php - PHP 中的 NodeJS 缓冲区等效项

node.js - 使用 NodeGit CloneOptions 克隆一个分支

javascript - 如何导出 javascript 类以在测试单元中使用?

javascript - 准备好的查询的 Node.js PostgreSQL 单引号问题

node.js - 在 express js 中请求同一服务器上的端点

node.js - 如何在nodejs中关闭请求?

npm - Mocha 测试不能与 Webpack 和 mocha-loader 一起运行