javascript - Nodejs Mocha:无法通过 ID 测试 POST 和 GET
问题描述
尝试通过 ID 测试 POST 请求和 GET。对于 POST 错误,它指出:“预期 200,得到 400”。然后对于 3 个 GET by ID,前两个是“错误:超过 2000 毫秒的超时......”,然后在几分钟后给我这两个 ID。然后是第三个:“预期 404,得到 400”。
尝试查看文档中的 expect、supertest 和 mocha,但找不到解决方案。这 3 个是我用于此测试的
这是POST测试
describe('POST /drinks', () => {
it('should create a new drink', (done) => {
let type = 'coffee';
let name = 'testName';
let image = 'testImage';
request(app)
.post('/drinks')
.send({
type,
name,
image
}).expect(200).expect((res) => {
expect(res.body.type, res.body.name, res.body.image).toBe(text);
}).expect((res) => {
expect(res.body.rating).toBe(number);
}).end((err, res) => {
if (err) {
return done(err);
}
Coffee.find({
type
}).then((feedData) => {
expect(feedData.length).toBe(1);
expect(feedData[0].type).toBe(text);
done();
}).catch(e => done(e));
});
});
});
然后是 GET by ID:
describe('GET /drinks/:id', () => {
it('should return individual drink document', (done) => {
request(app)
.get(`/drinks/${feedData[0]._id.toHexString()}`)
.expect(200)
.expect(res => {
expect(res.body.drink.text).toBe(feedData[0].text);
})
.end((err, res) => {
if (err) return done(err);
done();
});
});
it('should return 404 if drink is not found', (done) => {
let hexId = new ObjectID().toHexString();
request(app)
.get(`/drinks/${hexId}`)
.expect(404)
.end((err, res) => {
if (err) return done(err);
done();
});
});
it('should return 404 for non-object ids', (done) => {
request(app)
.get('/drinks/123abc')
.expect(404)
.end((err, res) => {
if (err) return done(err);
done();
});
});
});
这是我的 POST 路线:
// POST a drink
exports.postDrinks = (req, res) => {
let type = req.body.type;
if (!type) {
res.status(400).send('Request parameters missing');
}
let newDrink;
// Default Drink Fields
let defaultFields = {
type,
name: req.body.name,
tastingNotes: req.body.tastingNotes,
comments: req.body.comments,
image: req.body.image,
rating: req.body.rating
}
// Determine which type and store it as that type
switch (type) {
case 'beer':
newDrink = new Beer({
...defaultFields,
style: req.body.style,
source: req.body.source,
});
break;
case 'coffee':
newDrink = new Coffee({
...defaultFields,
beanType: req.body.beanType,
brewTime: req.body.brewTime,
strength: req.body.strength
});
break;
case 'liquor':
newDrink = new Liquor({
...defaultFields,
typOfLiquor: req.body.typOfLiquor
});
break;
case 'tea':
newDrink = new Tea({
...defaultFields,
leafType: req.body.leafType,
steepTime: req.body.steepTime,
});
break;
default:
console.log('Please select an apprioriate drink');
break;
}
// Saves POST and sends it back as well. If not, then error
newDrink.save().then((drink) => {
res.send(drink);
}, (e) => {
res.status(400).send(e);
});
}
这是我通过 ID 获取的路线:
/ GET by ID
exports.getIndividualDrink = (req, res) => {
let id = req.params.id;
// Show everything but id and v
Drink.findById(id).select('-_id -__v').then((drink) => {
// Check if theres that drink and ID is valid
if (!drink && !ObjectID.isValid(id)) {
return res.status(401).send();
}
// If there is, then send it back
res.send({
drink
});
}, (e) => {
res.status(400).send(e);
});
};
预期应该通过,但就像我说的结果是:1)POST:'错误:预期 200,得到 400'2)前两个 GET by ID:'错误:超过 2000 毫秒的超时。....' 3) 最后按 ID 获取:'预期 404,得到 400'
解决方案
400 Bad Request 错误是一个 HTTP 状态代码,表示您发送到服务器的请求在某种程度上不正确或损坏,服务器无法理解。 尝试检查您的架构,如果您错过了抛出 400 的内容,您应该发布所有必需的项目。
推荐阅读
- python - 阿拉伯数字到罗马数字转换器:包含 4 的数字不会转换
- javascript - 如何在推送到 Github 时隐藏数据库连接信息,但又能方便地恢复?
- python - 如何修复“语法错误:等待仅在异步函数中有效”
- sql - If Not Exists 在更新记录的循环内插入
- c# - 在对象后面抽象时将 SQL 日期时间转换为 C# 日期时间
- javascript - 在 Chrome 中发出警报后如何在 javascript 中重新加载页面
- python - 提交表单后如何修复 validate_on_submit() 函数抛出的异常
- graph - 具有 NP 复杂性的最长路径问题的示例?
- git - 有没有更简单的方法将多个文件夹“git init”到不同的存储库中?
- resttemplate - 如何使用restTemplate 发送一个jsonArray?