使用jest进行Mongoose save方法测试false pass

问题描述 投票:0回答:1

我尝试用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 protected]',
      name: 'some',
      nickname: 'oether',
      role: 'admin'
    })

    const b = new Author({
      email: '[email protected]',
      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手动终止它。

mongodb mongoose jest
1个回答
1
投票

a.save和b.save正在同时执行。我不确定为什么测试会挂起,但请尝试:

a.save()
 .then.(() => b.save())
 .then(console.log) 
 .catch(console.log)
© www.soinside.com 2019 - 2024. All rights reserved.