目前我正在使用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期望我定义了许多预期的调用。但我只是想模拟电话。
有没有优雅的解决方案?
答案 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模拟所有请求。在开始茉莉花测试之前,您还将启动这个“假的”后端服务器。