如何检测所有测试(在多个文件中)完成

时间:2019-01-21 10:30:11

标签: mocha

在所有文件中的所有测试都运行完之后,我想删除数据库。摩卡咖啡中有它的钩子吗?

after()钩子只能在1个文件内应用。

3 个答案:

答案 0 :(得分:1)

创建一个包含/需要所有其他测试的父文件,然后在该文件中使用after

describe('User', () => {
  require('../user/user.spec.js')
})

describe('Post', () => {
  require('../post/post.spec.js')
})

describe('Tag', () => {
  require('../tag/tag.spec.js')
})

describe('Routes', () => {
  require('./routes.spec.js')
})

after(() => {
  // drop database
})

答案 1 :(得分:1)

在摩卡中有一个根目录挂钩。对于您的情况,可以创建一个新文件并在after函数中指定drop database命令。就是这样!

// init-test.js

after(function() {
  // drop database
});

对于此解决方案,您无需在其他测试文件中移动任何测试。

参考: https://mochajs.org/#root-level-hooks

答案 2 :(得分:0)

我正在使用process.on('exit')。它仅在运行一个文件以及从 package.json 运行测试时有效。

database.mocha-base.js:

db.connect()

process.on('exit', async () => {
  console.log('All tests finished. Droping database')
  db.dropDatabase(dbName)
  db.disconnect()
})

module.exports = {
  applyHooks() {
     before(async () => {
        // truncate tables
     })
  }
}

在所有需要数据库访问的测试中,我都包含database.mocha-base.js

const dbMochaBase = require('./path/to/database.mocha-base.js')

describe('Tests', () => {
   dbMochaBase.applyHooks()

   ...
})