承诺.然后在使用Karma + Jasmine + PhantomJs时不会触发?

sup*_*san 2 javascript jasmine karma-runner karma-jasmine es6-promise

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();
    });
});
Run Code Online (Sandbox Code Playgroud)

我尝试过使用'babel-polyfill','es6-promise'和'promise-polyfill'无济于事.我究竟做错了什么?

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

Tam*_*dus 8

承诺得到解决,但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);
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

您可以使用done.fail显式地使规范失败.这需要捕获并通知jasmine测试期间未捕获的异常.