承诺(来自原生ES 6和jquery)在茉莉花中没有得到解决

时间:2017-03-19 13:26:42

标签: javascript jquery promise jasmine karma-jasmine

我需要使用jasmine测试一个promise,我可以在本机javascript(使用Promise构造函数)或jQuery(使用$.Deferred()方法)中编写promise。我不能使用angularJS。

当我尝试解析jasmine中的promises时,永远不会调用关联解析事件的方法。有关角度承诺的堆栈溢出有很多解决方案,但我找不到本机或jQuery承诺的解决方案。

这里是测试示例(我删除了每个代码,而我只留下了与promise相关的部分更合成):

describe('test native promises', function () {
    it('should resolve the promise', function () {
        var result;
        var promise = new Promise(function (callback) {
            callback({});
        });
        promise.then(function (response) {
            console.log('called 1');
            result = response;
        });
        Promise.resolve({}).then(function (response) {
            console.log('called 2');
            result = response;
        });
        expect(result).toBeDefined();
    });
});

永远不会调用console.logresult未定义(因此测试失败)。

jQuery承诺的同样问题:

describe('test jQuery promises', function () {
    it('should resolve the promise', function () {
        var result;
        var deferred = $.Deferred();

        deferred.promise().then(function (response) {
            console.log('called 3');
            result = response;
        });

        deferred.resolveWith({});

        expect(result).toBeDefined();
    });
});

变量result仍未定义且console.log从未调用过。

这是茉莉花单元测试中的一个问题,承诺在浏览器中运行良好(两个版本)。

我在单元测试中遗忘了什么?

据报道为duplicated question,但问题完全不同,在这种情况下,承诺根本没有被调用。

0 个答案:

没有答案