我正在使用 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;
我的单元测试:
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/