Promise .then 在使用 Karma + Jasmine + PhantomJs 时不触发?

Promise .then not triggering when using Karma + Jasmine + PhantomJs?

出于某种原因,我的单元测试无法使用 then 函数。这是测试代码。

describe("Basic promise test", () => {
    it("should trigger .then function", () => {
        var mock = jasmine.createSpy('some method');
        var promise = new Promise((resolve, reject)=> {
            console.log("inside Promise");
            resolve('something');
            console.log("done!");
        });
        promise.then(mock);         
        promise.then(function () {   //neither works!
            mock();
            console.log("resolved"); //code does reach here but only after test fails
        });

        expect(mock).toHaveBeenCalled();
    });
});

我试过使用 'babel-polyfill'、'es6-promise' 和 'promise-polyfill' 都无济于事。我做错了什么?

Jsfiddle 为此:https://jsfiddle.net/L53zxe39/

承诺已解决,但 then 回调仅在下一个微任务中调用, 检查 expect(mock).toHaveBeenCalled(); 完成后。

这是有意为之的行为,旨在防止围绕承诺产生歧义。 .then 保证稍后会调用回调,即使承诺已经解决。

异步茉莉花测试以下列方式工作:

describe("Basic promise test", () => {
    it("should trigger .then function", (done) => {
        var mock = jasmine.createSpy('some method');
        var promise = new Promise((resolve, reject)=> {
            console.log("inside Promise");
            resolve('something');
            console.log("done!");
        });
        promise.then(mock).then(() => {
          expect(mock).toHaveBeenCalled();
          done();
        }).catch(e => {
          done.fail(e);
        });
    });
});

您可以使用 done.fail 来显式使规范失败。这是在测试期间捕获并通知 jasmine 未捕获的异常所必需的。