我有一个带有唯一字段的mongoose模式,我正在尝试编写一个后端(快速)集成测试,该测试检查POST同一实体两次导致HTTP 400.当手动测试时,行为也是如此。然而,自动测试需要等待:
it('should not accept two projects with the same name', function(done) {
var project = // ...
postProjectExpect201(project,
() => {
setTimeout( () => {
postProjectExpect400(project, done);
},100);
}
);
});
两个post ...方法按指定方式执行,上面的代码工作正常,但如果超时被删除,BOTH请求会收到HTTP 200(尽管在数据库中只创建了一个实体)。
我是这些技术的新手,我不确定发生了什么。这可能是一个与mongodb相关的并发问题,如果是这样,我应该如何处理呢?
数据库调用如下所示:
Project.create(req.body)
.then(respondWithResult(res, 201))
.catch(next);
我已经尝试使用?w = 1选项btw连接到mongodb。
更新:
更详细: Project 是一个猫鼬模型, next 是我的快速错误处理程序,用于捕获重复错误。
测试功能:
var postProjectExpect201=function(project, done, validateProject) {
request(app)
.post('/api/projects')
.send(project)
.expect(201)
.expect('Content-Type', /json/)
.end((err, res) => {
if (err) {
return done(err);
}
validateProject && validateProject(res.body);
done();
});
};
var postProjectExpect400=function(project, done) {
request(app)
.post('/api/projects')
.send(project)
.expect(400)
.end((err, res) => {
if (err) {
return done(err);
}
done();
});
};