【问题标题】:Jest cannot handle the sequelize.sync() promiseJest 无法处理 sequelize.sync() 承诺
【发布时间】:2017-12-20 04:15:09
【问题描述】:

我用 Jest 运行了这个测试文件:

test('this works', () => {
  Promise.resolve();
});

test('this also works', (done) => {
  setTimeout(done, 100);
});

test('this does not work', () => {
  return models.sequelize.sync({force: true, logging: false});
});

test('this also does not work', (done) => {
  models.sequelize.sync({force: true, logging: false}).then(() => done());
});

使用 Sequelize.js 或 Jest 时有些奇怪。想法?

澄清一下:并不是我的测试失败了,所有 4 个测试都是绿色的。后两者将重置数据库,但即使在所有测试运行之后,Jest 进程也将永远挂起。开玩笑会说:4 过去了,只是我必须用 Ctrl + C 手动退出。

【问题讨论】:

  • 你确定续集承诺真的完成了吗?尝试在then 中添加一些日志记录
  • @RichardSzalay 是的,日志仍然会发生,所以我假设done 被调用,then 回调也被调用。无论出于何种原因,只是测试过程仍然会挂起。
  • 我想我发现了问题:github.com/sequelize/sequelize/issues/7953 打算再开一天,希望能提出更好的解决方案。

标签: node.js sequelize.js jestjs


【解决方案1】:

正如这个 Github 问题中提到的:https://github.com/sequelize/sequelize/issues/7953 sync 方法实际上只会在连接最终空闲时返回,因此解决方案是:

models.sequelize.sync({force: true, logging: false}).then(() => {
  models.sequelize.close();
});

【讨论】:

    猜你喜欢
    • 2021-12-19
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2019-01-24
    相关资源
    最近更新 更多