AssertionError: expected { Object (driver, name, ...) } to have property '_id'
AssertionError: expected { Object (driver, name, ...) } to have property '_id'
我不熟悉使用 Mocha 和 Chai 进行单元测试。我正在尝试在使用 Node.js 和 MongoDB 编写的 REST-API 上实施单元测试。我试过一个教程,但当我 运行 npm test
时,我得到 AssertionError: expected { Object (driver, name, ...) } to have property '_id'
。主要是应该把数据输入MongoDB。
app.js
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const Note = require('./db/models/note.js').Note;
app.use(bodyParser.json());
app.get('/notes', (req, res) => {
Note.find()
.then((notes) => res.status(200).send(notes))
.catch((err) => res.status(400).send(err));
});
app.post('/notes', (req, res) => {
const body = req.body;
const note = new Note({
name: body.name,
text: body.text
});
note.save(note)
.then((note) => res.status(201).send(note))
.catch((err) => res.status(400).send(err));
});
module.exports = app;
test.js
process.env.NODE_ENV = 'test';
const expect = require('chai').expect;
const request = require('supertest');
const app = require('../../../app.js');
const conn = require('../../../db/index.js');
describe('POST /notes', () => {
before((done) => {
conn.connect()
.then(() => done())
.catch((err) => done(err));
})
after((done) => {
conn.close()
.then(() => done())
.catch((err) => done(err));
})
it('OK, creating a new note works', (done) => {
request(app).post('/notes')
.send({ name: 'NOTE Name', text: "AAA" })
.then((res) => {
const body = res.body;
expect(body).to.contain.property('_id');
expect(body).to.contain.property('name');
expect(body).to.contain.property('text');
done();
})
.catch((err) => done(err));
})
it('Fail, note requires text', (done) => {
request(app).post('/notes')
.send({ name: 'NOTE' })
.then((res) => {
const body = res.body;
expect(body.errors.text.name)
.to.equal('ValidatorError')
done();
})
.catch((err) => done(err));
});
})
测试请求中的res.body
不包含属性_id
。
测试中的 res.body
可能是 debugged/logged 以找出注释对象的样子。 promise return 是一个对象吗?如果有,它是否包含 _id
属性?可以相应地更改测试。
我不熟悉使用 Mocha 和 Chai 进行单元测试。我正在尝试在使用 Node.js 和 MongoDB 编写的 REST-API 上实施单元测试。我试过一个教程,但当我 运行 npm test
时,我得到 AssertionError: expected { Object (driver, name, ...) } to have property '_id'
。主要是应该把数据输入MongoDB。
app.js
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const Note = require('./db/models/note.js').Note;
app.use(bodyParser.json());
app.get('/notes', (req, res) => {
Note.find()
.then((notes) => res.status(200).send(notes))
.catch((err) => res.status(400).send(err));
});
app.post('/notes', (req, res) => {
const body = req.body;
const note = new Note({
name: body.name,
text: body.text
});
note.save(note)
.then((note) => res.status(201).send(note))
.catch((err) => res.status(400).send(err));
});
module.exports = app;
test.js
process.env.NODE_ENV = 'test';
const expect = require('chai').expect;
const request = require('supertest');
const app = require('../../../app.js');
const conn = require('../../../db/index.js');
describe('POST /notes', () => {
before((done) => {
conn.connect()
.then(() => done())
.catch((err) => done(err));
})
after((done) => {
conn.close()
.then(() => done())
.catch((err) => done(err));
})
it('OK, creating a new note works', (done) => {
request(app).post('/notes')
.send({ name: 'NOTE Name', text: "AAA" })
.then((res) => {
const body = res.body;
expect(body).to.contain.property('_id');
expect(body).to.contain.property('name');
expect(body).to.contain.property('text');
done();
})
.catch((err) => done(err));
})
it('Fail, note requires text', (done) => {
request(app).post('/notes')
.send({ name: 'NOTE' })
.then((res) => {
const body = res.body;
expect(body.errors.text.name)
.to.equal('ValidatorError')
done();
})
.catch((err) => done(err));
});
})
测试请求中的res.body
不包含属性_id
。
测试中的 res.body
可能是 debugged/logged 以找出注释对象的样子。 promise return 是一个对象吗?如果有,它是否包含 _id
属性?可以相应地更改测试。