我尝试用Jest测试一个Mongoose模型。该模型包含名为email
的属性,该属性必须包含唯一值。这是我尝试运行的测试:
import { expect } from 'chai'
import mongoose from 'mongoose'
import bluebird from 'bluebird'
import Author from '../Author' // this is the model I try to test
mongoose.Promise = bluebird
describe('email key', () => {
beforeAll((done) => {
mongoose.connect('mongodb://127.0.0.1:27017/test')
let db = mongoose.connection
db.on('error', (err) => {
done.fail(err)
})
db.once('open', () => {
done()
})
})
test('duplicate email', () => {
const a = new Author({
email: 'email@gmail.com',
name: 'some',
nickname: 'oether',
role: 'admin'
})
const b = new Author({
email: 'email@gmail.com',
name: 'a',
nickname: 'a',
role: 'admin'
})
a.save()
.then((doc) => console.log(doc))
.catch((err) => console.log(err))
b.save() // should throw error on test
.then((doc) => console.log(doc))
.catch((err) => console.log(err))
})
afterAll((done) => {
mongoose.connection.db.dropDatabase().then(() => {
mongoose.connection.close()
done()
})
})
})
这是架构文件:
import mongoose from 'mongoose'
const authorSchema = new mongoose.Schema({
email: {
type: String,
unique: true,
index: true
}
})
const authorModel = mongoose.model('Author', authorSchema)
export default authorModel
我希望在save()
上执行b
方法时,在控制台中出现错误,例如email field should contain unique values
。
控制台显示测试成功通过(✓ duplicate email (2ms)
)。此外,测试被挂起并且不会终止工具我按ctrl+c
手动终止它。
答案 0 :(得分:1)
a.save和b.save正在同时执行。我不确定为什么测试会挂起,但请尝试:
a.save()
.then.(() => b.save())
.then(console.log)
.catch(console.log)