在 运行 测试之前,Mocha 似乎没有等待 promise 链完成
Mocha does not seem wait for promise chain to complete before running test
我正在使用 Mocha 测试代码中的数据库交互(因此我无法模拟数据库)。
为了使测试正常进行,我想在每次测试前清理我的数据库。根据我的研究,我应该使用 Mocha 的能力来处理 before 函数返回的承诺。
以下是我尝试实现此目标的方法:
const Orm = require('../db');
describe('Loading Xml Files to Database should work', () => {
before(() => {
return Orm.models.File.destroy({force: true, truncate: true, cascade: true});
});
it('run test', () => {
loadXmlFileToDatabase(....); // this loads data from a
// file into the table "files"
Orm.Orm.query("SELECT * FROM files")
.then(function (result){
console.log(result);
})
.catch(function(error){
console.log(error);
});
});
});
我是,但是在代码末尾从我的查询中返回零行。如果我省略 before()
函数一切正常,那么我的结论是,出于某种原因,Mocha 没有等待它完成。
如何确保 before()
功能在我的测试 运行 之前完成?
Mocha 期望函数返回一个 promise 以等待它。
要么显式 return
来自普通函数的承诺,要么使用 async
函数 await
describe('Loading Xml Files to Database should work', function(){
before(async function(){
await Orm.models.File.destroy({force: true, truncate: true, cascade: true});
});
it('run test', async function(){
await loadXmlFileToDatabase(....); // this loads data from a
// file into the table "files"
const result = await Orm.Orm.query("SELECT * FROM files");
expect(result).to.eql({})
})
});
我正在使用 Mocha 测试代码中的数据库交互(因此我无法模拟数据库)。 为了使测试正常进行,我想在每次测试前清理我的数据库。根据我的研究,我应该使用 Mocha 的能力来处理 before 函数返回的承诺。
以下是我尝试实现此目标的方法:
const Orm = require('../db');
describe('Loading Xml Files to Database should work', () => {
before(() => {
return Orm.models.File.destroy({force: true, truncate: true, cascade: true});
});
it('run test', () => {
loadXmlFileToDatabase(....); // this loads data from a
// file into the table "files"
Orm.Orm.query("SELECT * FROM files")
.then(function (result){
console.log(result);
})
.catch(function(error){
console.log(error);
});
});
});
我是,但是在代码末尾从我的查询中返回零行。如果我省略 before()
函数一切正常,那么我的结论是,出于某种原因,Mocha 没有等待它完成。
如何确保 before()
功能在我的测试 运行 之前完成?
Mocha 期望函数返回一个 promise 以等待它。
要么显式 return
来自普通函数的承诺,要么使用 async
函数 await
describe('Loading Xml Files to Database should work', function(){
before(async function(){
await Orm.models.File.destroy({force: true, truncate: true, cascade: true});
});
it('run test', async function(){
await loadXmlFileToDatabase(....); // this loads data from a
// file into the table "files"
const result = await Orm.Orm.query("SELECT * FROM files");
expect(result).to.eql({})
})
});