gpt4 book ai didi

angularjs - Jasmine 如何测试发送到服务器的请求数

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

有谁知道如何使用 Jasmine $httpBackend 对象测试发送了多少请求?

我有一个剑道网格,它是使用从 RESTful 服务获得的数据构建的。

网格还具有预过滤功能。这意味着您可以声明一组条件,然后在构建网格时,将条件与数据请求一起发送到服务器。

然后,在发回响应之前,数据应该由 RESTful 服务过滤。因此,响应将仅包含满足标准的数据。

问题是当前正在发送两个请求:一个用于数据,另一个用于条件。

我想编写一个测试,确保只发送一个请求,用于原始数据,并且过滤由 RESTful 服务完成。

这是我的测试:

it('should send only one request to the server when getting data to build the grid', function () {
angular.mock.inject(function ($compile, $rootScope) {
var scope = $rootScope.$new();

// THE CRITERIA
scope.myCriteria = {
"operator": "and",
"operands": [
{
"property": "accountId",
"value": "1",
"constraint": "contains",
"ignoreCase": "true"
}
]
};

// THE ORIGINAL DATA
var respondData = [
{accountId: '1', name: 'Account 1', status: 'active'},
{accountId: '3', name: 'Account 3', status: 'active'},
{accountId: '4', name: 'Account 4', status: 'active'}
];

// THE REQUEST TO GET THE DATA
$httpBackend.when('GET', "api/grid/accounts?crit=substringof('1',accountId)+eq+true").respond(respondData);

// BUILD THE GRID
// sg-data is the data from the RESTful service.
// sg-filters is the filtering criteria
var elem = $compile('<div sg-grid sg-data="api/grid/accounts" sg-columns="accountId,name,shortName,status" sg-filters="myCriteria"></div>')(scope);

$rootScope.$apply();
$httpBackend.flush();
/*
I want to do something like this:
expect($httpBackend.requests.length).toBe(1);
*/
});
});

最佳答案

你应该使用 expect 而不是 when 因为你想断言发送了哪些请求。

$httpBackend.expect('GET', "api/grid/accounts?crit=substringof('1',accountId)+eq+true").respond(respondData);
...
$httpBackend.flush();
...
$httpBackend.verifyNoOutstandingExpectation();

最后一行验证代码是否发出了第一个请求。通过使用 expect 而不是 when 我们可以验证没有发出第二个请求。如果代码发出第二个请求,您将收到“没有更多请求”错误。

它们在 AngularJS docs 中描述了请求期望 ($httpBackend.expect) 和后端定义 ($httpBackend.when) 之间的区别。

Request expectations provide a way to make assertions about requests made by the application and to define responses for those requests. The test will fail if the expected requests are not made or they are made in the wrong order.

Backend definitions allow you to define a fake backend for your application which doesn't assert if a particular request was made or not, it just returns a trained response if a request is made. The test will pass whether or not the request gets made during testing.

关于angularjs - Jasmine 如何测试发送到服务器的请求数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22908259/

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