未处理的Promise拒绝警告:TypeError:第一个参数必须是string或缓冲区

问题似乎是重复的,但我一直在努力解决这个从最近3个小时。 基本上我使用supertestmocha来testing我的API。 我无法理解哪个承诺没有得到解决。

 app.post('/todos', (req, res) => { var todo = new Todo({ text : req.body.text }); todo.save().then( (doc) => { res.status(200).send(doc) }, (e) => { res.status(400).end(e); }); }); 

以下是我写的testing:

 const expect = require('expect'); const request = require('supertest'); var {app} = require('./../server'); var {Todo} = require('./../models/todo'); // Setup database beforeEach((done) => { Todo.remove({}) .then(() => done()) .catch((e)=> done(e)); }); describe('Post /todos', () => { it('should create a new todo', (done) => { var text = 'Testing text'; // supertest to get, post request(app) .post('/todos') .send({text}) // Automatic conversion to json - ES6 .expect(200) // assertions .expect((res) => { // custom parsing expect(res.body.text).toBe(text); }) .end((err, res) => { // done directly accepted, but rather let's be more precise now - check mongodb if (err) { return done(err); } Todo.find() .then((todos) => { expect(todos.length).toBe(1); expect(todos[0].text).toBe(text); done(); }) .catch((e) => done(e)); }); }); }); 

请帮忙解决这个问题。 这是整个错误消息:

mocha server / ** / *。test.js监听端口:3000 Post / todos(node:1882)UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝ID:1):TypeError:第一个参数必须是string或缓冲区(节点:1882 )[DEP0018]弃用警告:不处理的承诺拒绝已被弃用。 将来,未处理的承诺拒绝将使用非零退出代码来终止Node.js进程。 1)应创build一个新的待办事项0传递(2s)1失败1)后/待办事项应创build一个新的待办事项:错误:超过2000ms的超时。 对于asynchronoustesting和钩子,确保调用“done()”; 如果返回一个Promise,确保它解决。