gpt4 book ai didi

AngularJS单元测试: $httpBackend.时动态响应

转载 作者:行者123 更新时间:2023-12-03 00:07:22 26 4
gpt4 key购买 nike

我在开发 Feed (RSS) 应用程序时正在使用 AngularJS 单元测试。 Feed 可以获取远程 rss 数据并对其进行解析并保存解析的项目。为了测试 rss 获取,我使用 $httpBackend 模拟:

beforeEach(inject(function (_$httpBackend_, _feedMock_, _mockConfig_) {
_$httpBackend_.when('GET', _mockConfig_.FEED_URL).respond(_feedMock_);
}));

然后是下面

$httpBackend.expectGET(mockConfig.FEED_URL);
feed.fetch();
$httpBackend.flush();

效果很好。

但我需要使 Feed 可以通过获取更新的 rss 数据并附加新项目来实现其状态。因此,Feed 发出相同的请求,但获得了新的更新数据。我正在尝试通过以下方式重新创建服务器定义:

$httpBackend.when('GET', _mockConfig_.FEED_URL).respond(feedMockUpdated);

然后使用expect和flush进行相同的操作,但是$httpBackend使用旧数据(feedMock)而不是新数据(feedMockUpdated)进行响应。如何使 $httpBackend 在同一请求上响应不同的数据?

最佳答案

您可以使用函数来设置respond,而不仅仅是静态数据集。

来自文档:

http://docs.angularjs.org/api/ngMock.$httpBackend

respond – {function([status,] data[, headers])|function(function(method, url, data, headers)} – The respond method takes a set of static data to be returned or a function that can return an array containing response status (number), response data (string) and response headers (Object).

据我了解,您的情况是,您希望同一端点在以后的调用中返回不同的数据,您可以尝试如下操作。这只是实现一个简单的计数器,它将在后续调用中切换数据。

var rssCalled = 0;

$httpBackend.when('GET', _mockConfig_.FEED_URL).respond(function(method, url, data, headers){
if(rssCalled === 0) {
rssCalled++;
return [200, feedMock, {}];
} else {
return [200, feedMockUpdated, {}];
}
});

关于AngularJS单元测试: $httpBackend.时动态响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16289368/

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