BeforeEach,错误:发送后无法设置标头

时间:2017-12-06 18:11:24

标签: node.js mongoose

这段代码出了什么问题?,它引发了两个错误:

错误:发送后无法设置标头

TypeError:无法读取未定义的属性“_id”。

我认为是因为链接。然后在BeforeEach中,但我无法解决它,有人可以帮忙吗?感谢。

const expect = require('expect');
const request = require('supertest');
const{ObjectID} = require('mongodb');

const {app} = require('./../server');
const {Todo} = require('./../models/todo');

if(!module.parent) {
app.listen();
}

const todos=[{
  _id:new ObjectID(),
  text:"2 test todo"
},
{
_id:new ObjectID(),
text:"1 test todo"
}];

beforeEach((done) => {
  Todo.remove({}).then(() => {
    return Todo.insertMany(todos);
  }).then(() => done());
});

describe('DELETE /todos/:id', () => {
  it('most delete a doc', (done) => {
    let hexId = todos[1]._id.toHexString();

    request(app)
    .delete(`/todos/${hexId}`)
    .expect(200)
    .expect((res) => {
        expect(res.body.todo._id).toBe(hexId);
    })
    .end((err, res) => {
        if(err) return done(err);

    Todo.findById(hexId).then((todo) => {
        expect(todo).toNotExist();
        done();
    }).catch((e) => done(e));

    });
  });
});

1 个答案:

答案 0 :(得分:0)

错误:发送后无法设置标头

- >因为回调(已完成)已经调用

TypeError:无法读取属性' _id'未定义的。

虽然我不知道typeError行号但是方面注释在下面的代码中

beforeEach((done) => {
  Todo.remove({}).then(() => {
    return Todo.insertMany(todos);
  })
  .then(() =>{
    describe('DELETE /todos/:id', () => {
      it('most delete a doc', (done) => {
        let hexId = todos[1]._id.toHexString();

        request(app)
        .delete(`/todos/${hexId}`)
        .expect(200)
        .expect((res) => {
                // make sure you are you getting from req.body
            expect(res.body.todo._id).toBe(hexId);
        })
        .end((err, res) => {
            if(err) return done(err);

        Todo.findById(hexId).then((todo) => {
            expect(todo).toNotExist();
            done();
        }).catch((e) => done(e));

        });
      });
    });

});