首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >答应.then在使用卡玛+茉莉花+幻影时不触发?

答应.then在使用卡玛+茉莉花+幻影时不触发?
EN

Stack Overflow用户
提问于 2016-06-23 13:53:10
回答 1查看 3.1K关注 0票数 2

由于某种原因,我的单元测试无法实现then函数。这是测试代码。

代码语言:javascript
运行
复制
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-poly填充”、“ES6-诺言”和“答应-填充”,但都没有效果。我做错了什么?

Jsfiddle用于这个:https://jsfiddle.net/L53zxe39/

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-23 14:04:39

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

这是有意采取的行为,旨在防止围绕承诺的模棱两可之处。即使承诺已经解决,也保证稍后调用.then回调。

异步茉莉花测试的工作方式如下:

代码语言:javascript
运行
复制
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显式地失败规范。这是需要捕获和通知茉莉花在测试期间的不明确的异常。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37993662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档