gpt4 book ai didi

javascript - 在 Angular ngResources 的 Karma 测试中推迟 promise

转载 作者:行者123 更新时间:2023-11-28 07:13:04 25 4
gpt4 key购买 nike

目前,我正在使用 ngResource 进行 RESTful API 调用,并使用 KARMA 和 jasmine 进行单元测试和集成测试。在一个 Controller 中,我有一个期望完成的函数:

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

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

在我的 karma 测试中,我测试列表是否为空,调用上面的函数并检查 $scope.elem 数组是否具有新创建的元素。但既然它是一个 promise ,KARMA 测试并不能解决这个问题。我尝试使用 $rootScope.apply(),但 $httpBackend 期望我定义大量预期的调用。但我只是想模拟通话。

有什么优雅的解决方案吗?

最佳答案

对此没有优雅的解决方案。测试的主要目的是为测试准备“隔离”的生态系统。如果你想测试 ajax 调用,它们必须返回一些东西。你不能测试并只是告诉“跳过这个 promise 并表现得好像它是成功的”。

当你需要解决任何 promise 时,我正在使用这个。

  $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);

因此,当 header 内的授权 token 未定义时,它将在请求 host/me 上使用伪造的 json 响应 http 200。

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

关于javascript - 在 Angular ngResources 的 Karma 测试中推迟 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31117368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com