node.js mongoose chai-http RESTful APItesting(唯一字段)的行为与手动ARC APItesting不同

各位开发者,

我编写了一个基于node.js和mongoose的RESTful API服务器。 在编写相应的testing时,我对使用chai-http进行自动化testing和使用ARC(高级REST客户端,chrome插件)的手动APItesting之间的明显不同之处有着奇怪的体验。

我的用户模型(见下面的定义)有一个唯一的“用户名”字段。 当我使用ARC使用现有的用户名login新用户时,我按照预期从mongodb驱动程序中获取E11000。

当我这样做(至less我这样认为)使用chai-http.request.post,我得到一个statuscode 200,一个SUCCESS结果,我有两个用户在我的testing数据库集合中具有相同的用户名!

用户模式模式,包括/挂钩/导出等。ommited:

const userSchema = new Schema({ admin_info: AdminInfo, role: { type: String, required: true}, username: { type: String, required: true, unique: true, index: { unique: true } }, password: { type: String, required: true }, firstname: String, lastname: String, mail: String, }); 

用于POST /用户的通用路由处理函数,其中“model”是上述用户模式的一个实例:

 function addEntry(req, res, next, model) { var entry = new model(req.body); entry.save((err, obj) => { if(err) { res.status(500).json({'ERROR': err}); } else { res.json({'SUCCESS': obj}); } }); } 

柴testing案例,产生一个状态代码200和一个SUCCESSful插入(不如预期!):

 describe('Users API', () => { beforeEach((done) => { var user = createUser(); user.save((err) => { if (err) { console.error(err); } done(); }) }); afterEach((done) => { User.collection.drop(); done(); }); ... it('should NOT add a SINGLE user if the username already exists on /users POST' , (done) => { var user = new User({ admin_info: { author: 'NEC' }, role: 'mod', username: 'Lycidas', password: 'abcd' }); chai.request(server) .post('/users') .send(user) .end((err, res) => { console.log(res.body); res.should.have.status(500); res.should.be.json; res.body.should.be.a('object'); res.body.should.have.property('ERROR'); done(); }); }); 

同一个testing用例日志在POST请求之后输出一个GET / users:

 [ { "_id": 689, "role": "admin", "username": "Lycidas", "password": "$2a$10$RmDbg4rvtP147i6Rt2C9.Okx1pZ96cIWUoNW/TxzrD4UbZIHvJRw.", "__v": 0, "admin_info": { "modified_at": "2017-08-07T08:42:10.355Z", "author": "NEC", "created_at": "2017-08-07T08:42:10.355Z" } }, { "_id": 690, "role": "mod", "username": "Lycidas", "password": "$2a$10$O1yrYmO42lLyW8nOyqlnauJSGJB/3MLp0mHrDISWMh1AgNAViuzB.", "__v": 0, "admin_info": { "modified_at": "2017-08-07T08:42:10.453Z", "author": "NEC", "created_at": "2017-08-07T08:42:10.448Z" } } ] 

正如你所看到的,第二个用户有一个现有的用户名,但添加没有错误。 有任何想法吗? 我的testing用例是否错误,我的API工作应该如何? 还是在我的服务器上创build了一个具有潜在危险的错误? 我对PUT / users /也有相同的(不同的)行为。

任何帮助将不胜感激,

Lycidas

/编辑:出于好奇我使用NPM包“mongoose独特的validation”和tada,所有的testing用例工作正常。