这段代码出了什么问题?,它引发了两个错误:
错误:发送后无法设置标头
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));
});
});
});
答案 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));
});
});
});
});