延迟在角度ngResources的Karma测试中的承诺

时间:2015-06-29 13:46:20

标签: javascript angularjs karma-runner

目前我正在使用ngResource进行RESTful API调用,而且我正在使用KARMA&茉莉花做我的单元和集成测试。 在一个控制器内部,我有一个期望完成承诺的功能:

var elem = new Element() // calling a ngResource Factory    

elem.$save().then(function () {
    $scope.elem.push(elem);
});

在我的业力测试中,我测试列表是否为空,调用上面的函数并检查$scope.elem数组是否具有新创建的元素。但由于它的承诺,KARMA测试并没有解决这个问题。我试图使用$ rootScope.apply(),但是$ httpBackend期望我定义了许多预期的调用。但我只是想模拟电话。

有没有优雅的解决方案?

1 个答案:

答案 0 :(得分:0)

对此没有优雅的解决方案。测试的主要目的是准备“隔离”生态系统进行测试。如果你想测试ajax调用,他们必须返回一些东西。你不能测试,只是说“跳过这个承诺,就像它成功一样”。

当你需要解决任何承诺时,我正在使用它。

  $httpBackend.flush();
  $rootScope.$apply();

这将调用$ httpBackend,当然它会预期通话。你别无选择

1。)模拟所有后端调用(这取自我的测试)

 identityBackend = $httpBackend.when("GET", AppConfig.API_IDENTITY_ENDPOINT + "/me",null,function(headers)
        {
            return headers.Authorization !== undefined;
        }).respond(200, fakeAuthUser);

因此,当请求host / me中的授权令牌未定义时,它将使用假的json响应请求主机/我。

2.。)第二个选择,在nodejs / express中创建可模拟的后端,并使用jsons模拟所有请求。在开始茉莉花测试之前,您还将启动这个“假的”后端服务器。