这个问题不是来自 生产环境 工作,我只是想更好地理解承诺,错误和javascript测试 .

我试图确认延迟的结果承诺返回方法抛出错误 . 我知道它有错误和承诺的首选模式是拒绝错误而不是丢弃它们,但是如果一个promise返回方法不容易被重写来处理那个首选模式,我想了解我的测试代码应该如何不工作

当我运行以下测试代码时,测试工具会看到“延迟错误”消息错误,该错误未在asyncWrapperFunc方法的try / catch中捕获 .

it("promise wrapped delayed error thrown and not caught", function (done) {
  var delayedErrorFunc = function () {
    return new Promise((resolve, reject) => {
      setTimeout(function () {
        throw new Error("delayed error");
      }, 25);
    });
  };
  var asyncWrapperFunc = async function () {
    try {
      await delayedErrorFunc();
    } catch (err) {
      expect(err).not.toBeNull();
      done();
      return;
    }
    throw new Error("should not be run");
  };
  asyncWrapperFunc();
});

这种用例似乎直接由茉莉花回购问题跟踪器中的茉莉花测试运行模块预测https://github.com/jasmine/jasmine/issues/1410所以要么我编写的测试错误比正常级别的错误,javascript运行时环境或jasmine中存在错误或完全不同的东西 . 有人可以确认问题行为吗?

我正在使用cmd命令行中的Windows 10,节点v8.1.3,Jasmine 2.6.0和jasmine-spec-reporter 4.1.1 .