Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 测试Jasmine 2.0中异步返回$q承诺的Angular服务_Javascript_Angularjs_Jasmine_Karma Runner_Karma Jasmine - Fatal编程技术网

Javascript 测试Jasmine 2.0中异步返回$q承诺的Angular服务

Javascript 测试Jasmine 2.0中异步返回$q承诺的Angular服务,javascript,angularjs,jasmine,karma-runner,karma-jasmine,Javascript,Angularjs,Jasmine,Karma Runner,Karma Jasmine,我有一个测试承诺结果的规范 允诺解决了,但随后,接住,最后处理者似乎从未开火,呼叫完成 因此,规范超时并失败,请参见Chrome开发者控制台的屏幕截图 茉莉花套房和规格 describe("promise suite", function () { var someMethod = function() { var deferred = $q.defer(); setTimeout(function() {

我有一个测试承诺结果的规范

允诺解决了,但随后,接住,最后处理者似乎从未开火,呼叫完成

因此,规范超时并失败,请参见Chrome开发者控制台的屏幕截图

茉莉花套房和规格

describe("promise suite", function () {
        var someMethod = function() {
            var deferred = $q.defer();
            setTimeout(function() {
                console.log('All done calling resolve');
                deferred.resolve('all done');
            }, 500);
            return deferred.promise;
        }
        iit("promise spec", function (done) {
            someMethod()
                .then(function(message) {
                    console.log('promise method resolved, running expectation');
                    expect(message).toBe('all done');
                    done();
                })
                .catch(function(error) {
                    console.log('promise was rejected ', error);
                    done();
                })
                .finally(function() {
                    console.log('calling done from finally');
                    done();
                });
        });
    });

$q承诺将在下一个摘要中解决。。。因此,您需要触发摘要:

$rootScope.$digest();

在plunkr中尝试了您的代码,它正在工作,请参阅控制台输出

因为在这个示例中没有要引导的应用程序,所以我使用ng模块来获得$q服务


我在plunker中看到了你的代码,它肯定在工作。在我的测试套件中无法得到相同的结果…在规范底部调用$rootScope.$digest似乎没有效果。你想从那里打电话吗?是的。最后,我确信这就是问题所在。我最近也有同样的问题,这是一个摘要问题。虽然。。。在解决承诺后,即在超时函数中,尝试调用摘要。那也许行。同样,我也不确定,我的计算机上没有开发环境。如果可以,也许可以尝试使用$timeout而不是setTimeout。