我在testUtils.js中有以下代码:
var truncateTable = function (model, trx) {
console.log(`Truncating ${model.prototype.tableName}`);
return knex(model.prototype.tableName).transacting(trx).truncate();
};
utils = {
/**
* Database utility for cleaning up its tables
*/
teardown: function () {
return knex.transaction(function (trx) {
return knex.raw('SET foreign_key_checks = 0;').transacting(trx)
.then(() => {
return truncateTable(models.ProductAnomaly,trx)
})
.then(() => {
return truncateTable(models.Product, trx);
})
.then(() => {
return truncateTable(models.TaskListItem, trx);
})
.then(() => {
return truncateTable(models.TaskList, trx);
})
.then(() => {
return truncateTable(models.User, trx);
})
.then(() => {
console.log('TRUNCATE FINISHED');
return knex.raw('SET foreign_key_checks = 1;').transacting(trx);
});
});
}
}
当我运行我的测试时,它会打印:
Truncating products_anomalies
Truncating products
Truncating tasklist_items
Truncating tasklists
Truncating users
但正如您可能会看到永远不会打印行"TRUNCATE FINISHED"
,即使对所有5个表执行了操作(截断)。为什么呢?
这是我的测试文件中的before
方法:
before((done) => {
this.timeout(10000);
testUtils.teardown()
.then(() => {
return testUtils.setup();
})
.then(() => {
done();
})
.catch(err => console.log(JSON.stringify(err)));
})
答案 0 :(得分:0)
很可能是因为你的拆解功能中没有.catch,所以如果你的上一次truncateTable调用出现错误,你就永远不会知道没有捕获拒绝承诺。
尝试:
DateTimeFormatter
答案 1 :(得分:0)
我发现什么停止执行,截断序列和包含样本数据的时间超过2000毫秒,然后我不得不增加超时值。