【问题标题】:Promise .then not triggering when using Karma + Jasmine + PhantomJs?Promise .then 在使用 Karma + Jasmine + PhantomJs 时不会触发?
【发布时间】:2016-06-23 13:53:10
【问题描述】:

由于某种原因,我的单元测试无法运行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/

【问题讨论】:

  • promise 异步解析,所以需要使用 jasmine 的异步测试功能。根据this articlethis SO answer,这涉及到使用runswaitsFor。我会发布它作为答案,但我对茉莉花一无所知,也许有比runswaitsFor 更具体的承诺测试。
  • @T.J.Crowder 请在此处查看 jsfiddle:jsfiddle.net/L53zxe39。我已经尝试过使用waitsFor,但它会引发错误,因为我使用的是 Jasmine 2.0(我认为他们已经删除了它)
  • 是的,这就是为什么我没有发布答案,我只是不知道茉莉花,无法判断文章的年龄,而我找到的答案是从 2013 年开始的,当时还没有真正的承诺大的。但从根本上说,问题在于分辨率是异步的,所以茉莉花需要知道这一点。因此,请查看 jasmine 文档,了解当前测试基于 Promise 的 API 的方法。

标签: javascript jasmine karma-runner karma-jasmine es6-promise


【解决方案1】:

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

这是一种预期行为,旨在防止围绕承诺产生歧义。 .then 回调保证稍后会被调用,即使承诺已经解决。

异步 ​​jasmine 测试的工作方式如下:

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 未捕获的异常所必需的。

【讨论】:

    猜你喜欢
    • 2017-06-08
    • 2017-01-30
    • 2015-06-06
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    • 2019-01-12
    • 2016-02-10
    相关资源
    最近更新 更多