gpt4 book ai didi

javascript - Karma-Jasmine:意外的请求:GET…预期没有其他请求

转载 作者:行者123 更新时间:2023-12-03 09:32:46 24 4
gpt4 key购买 nike

现状:

我正在AngularJs应用程序中测试两个不同的http调用。

有一个奇怪的行为。如果我分别测试每个人,并在 Controller 和测试中将另一个临时注释掉,则每个人都可以正常工作并且测试通过。

但是,如果同时进行两项测试时运行业力,它们将失败,并显示以下错误消息:

Unexpected request: GET https://MY_DOMAIN_2.com/list_project
No more request expected

控制者:
.controller('TestController', function($scope, $http, $timeout) {

$scope.getLanguageList = function()
{
$http.get('http://MY_DOMAIN_1.org/languageList').then(function(resp)
{
$scope.language_list = resp.data;
},
function(err)
{
$scope.language_list = [];
})
}

$scope.language_list = [];
$scope.getLanguageList();


$scope.get_project_list = function()
{
$http.get('https://MY_DOMAIN_2.com/projectList').then(function(resp)
{
$scope.project_list = resp.data;
},
function(err)
{
$scope.project_list = [];
})
}

$scope.project_list = [];
$scope.get_project_list();

})

测试:
describe('Http requests tests', function() {

beforeEach(module('my_app.controllers'));

var $controller;
var $httpBackend;
var $scope;
var $timeout;


describe('Lists test', function()
{

beforeEach(angular.mock.http.init);
afterEach(angular.mock.http.reset);

beforeEach(inject(function(_$controller_, _$httpBackend_)
{
$controller = _$controller_;
$scope = {};
$httpBackend = _$httpBackend_;

}));


it('should load default language list', function (done)
{
$httpBackend.whenGET('http://MY_DOMAIN_1.org/languageList').passThrough();

var TestController = $controller('TestController', { $scope: $scope });

setTimeout(function()
{
expect($scope.language_list).not.toEqual([]);
done();
}, 1000);

});


it('should load default project list', function (done)
{
$httpBackend.whenGET('https://MY_DOMAIN_2.org/projectList').passThrough();

var TestController = $controller('TestController', { $scope: $scope });

setTimeout(function()
{
expect($scope.project_list).not.toEqual([]);
done();
}, 1000);

});

});

});

问题:

为什么我收到该错误消息?
该代码应该很好,因为它们分别可以正常工作。我想念什么吗?

谢谢!

最佳答案

这里有一些指针和一个演示http://plnkr.co/edit/Kp9C4S6oNVu1MM1YLb90?p=preview

  • 您应该使用$httpBackend.flush()而不是setTimeout()。这样,您可以控制异步请求何时返回。它使测试变得更加容易。
  • 将$ httpBackend和 Controller 拉到beforeEach语句中。创建 Controller 后,它将同时触发两个URL。然后,您可以对其进行单独评估。当它在it语句中隔离时,它不会调用另一个$ http并引发意外的url错误。
  • 您还应该模拟$ http请求的响应,而不是passThrough。您并不会总是拥有Internet连接,并且响应可能会改变。因此,使模拟数据看起来像您期望的那样。
  • 此外,$httpBackend.whenGET('httpS://MY_DOMAIN_2.org/projectList')正在请求不正确的URL。它应该是小写的s.com网址。这是因为 Controller 正在请求

    $http.get('https://MY_DOMAIN_2.com/projectList')

  • 关于javascript - Karma-Jasmine:意外的请求:GET…预期没有其他请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33214050/

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