【发布时间】:2016-01-17 18:41:03
【问题描述】:
情况:
我正在我的 AngularJs 应用程序中测试两个不同的 http 调用。
有一个奇怪的行为。如果我分别测试每个,另一个临时注释掉(在控制器和测试中)每个都可以正常工作并且测试通过。
但是如果我在两个测试都运行 karma 时,它们会失败,并给出以下错误消息:
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);
});
});
});
问题:
为什么我会收到该错误消息? 代码应该没问题,因为它们分别工作正常。我错过了什么吗?
谢谢!
【问题讨论】:
-
如果您将 $scope = {} 更改为 $scope = $rootScope.$new() 会怎样?
-
已尝试但没有任何改变。
标签: javascript angularjs unit-testing karma-runner karma-jasmine