摩卡异步 afterEach 钩子不等待

时间:2021-02-10 08:43:55

标签: javascript ecmascript-6 async-await mocha.js

我正在使用 sequelize 框架对 CRUD 操作进行一些测试。
每次测试后,我想删除表中的所有记录,但这并没有发生。 当我运行所有测试时,create 测试失败,因为记录数大于 1:

Database shall be empty: expected 1 to equal 0

当我只运行 create 测试时,它工作得很好,所以我认为 forEach 钩子有问题。 当我使用 after 钩子时,它工作正常,从表中删除所有记录。

describe('User CRUD', () => {
    before(async () => {
        await db.user.sync()
    })

    afterEach(async () => {
        // delete all records
        await db.user.destroy({ where: {} })
    })

    // after(async () => {
        // delete all records
    //    await db.user.destroy({ where: {} })
    // })

    it('create', async () => {
        // start with no hosts
        let usersCount = await db.user.count()
        chai.expect(usersCount).to.equal(0, 'Database shall be empty')

        // adding one user
        const newUser1 = await db.user.create(user1)

        usersCount = await db.user.count()

        chai.expect(newUser1.username).to.equal('admin', 'Username does not match')
        chai.expect(newUser1.password).to.equal('adminPw', 'Password does not match')
        chai.expect(usersCount).to.equal(1, 'Database shall have one inserted record')

        // adding second user
        const newUser2 = await db.user.create(user2)

        usersCount = await db.user.count()

        chai.expect(newUser2.username).to.equal('user', 'Username does not match')
        chai.expect(newUser2.password).to.equal('userPw', 'Password does not match')
        chai.expect(usersCount).to.equal(2, 'Database shall have one inserted record')
    })

    it('delete', async () => {
        // adding one host
        const newUser1 = await db.user.create(user1)
        await newUser1.destroy()

        let usersCount = await db.user.count()

        chai.expect(usersCount).to.equal(0, 'Database shall not have inserted records')
    })

    it('errors', async () => {
        const createDuplicatedRole = async () => {
            await db.user.create(user1)
            await db.user.create(user1)
        }

        chai.expect(createDuplicatedRole()).to.be.rejectedWith(db.sequelize.UniqueConstraintError, 'User with same username does already exist.')
    })
})

我做错了什么?

0 个答案:

没有答案