Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs $httpBackend导致测试失败,并带有;“不需要更多请求”;_Angularjs_Unit Testing_Jasmine_Karma Jasmine - Fatal编程技术网

Angularjs $httpBackend导致测试失败,并带有;“不需要更多请求”;

Angularjs $httpBackend导致测试失败,并带有;“不需要更多请求”;,angularjs,unit-testing,jasmine,karma-jasmine,Angularjs,Unit Testing,Jasmine,Karma Jasmine,在重构单元测试依赖项的过程中,我在大约200个依赖于$httpBackend的angular Mock的测试中遇到了这个错误,导致它们失败。我查看了调用堆栈,似乎$httpBackend.flush()在尝试尝试attemptSync时导致调用失败 下面是失败的测试的样子,这是错误的样子: 测试失败: fdescribe('UserPanelSettingsCtrl', function() { var $q, userPanelSettingsCtrl, scope, $httpBack

在重构单元测试依赖项的过程中,我在大约200个依赖于$httpBackend的angular Mock的测试中遇到了这个错误,导致它们失败。我查看了调用堆栈,似乎$httpBackend.flush()在尝试尝试attemptSync时导致调用失败

下面是失败的测试的样子,这是错误的样子:

测试失败:

fdescribe('UserPanelSettingsCtrl', function() {
   var $q, userPanelSettingsCtrl, scope, $httpBackend, WEBAPI_URL, MDAPI_URL, jstz;

beforeEach(function() {
    module('config');
    module('Core');
    module('utils');
});

beforeEach(function() {
    inject(function(_$q_, _$controller_, _$httpBackend_, _WEBAPI_URL_, _MDAPI_URL_, _$rootScope_, _jstz_) {
        $q = _$q_;
        scope = _$rootScope_.$new();
        $httpBackend = _$httpBackend_;
        WEBAPI_URL = _WEBAPI_URL_;
        MDAPI_URL = _MDAPI_URL_;
        jstz = _jstz_;

        userPanelSettingsCtrl = _$controller_('UserPanelSettingsCtrl', {
            $scope: scope,
            user: {'profile':{'workgroups':{}}},
            jstz: jstz
        });
    });
});

beforeEach(function(){
    $httpBackend.expectGET(WEBAPI_URL + 'v1/users/me/settings/webui').respond({});
    $httpBackend.expectGET(MDAPI_URL + "v1/list/Mapped%20Megacomponent").respond([{id:1,name:'3D'}]);
    $httpBackend.expectGET(MDAPI_URL + "v1/list/Mapped%20Component").respond([{id:1,name:'D3D'}]);
});

afterEach(function(){
    angular.element('.toast').remove();
});

it('should load user settings and profile data from API ', function() {
    $httpBackend.flush();

    expect(scope.loading).toBe(false);
    expect(scope.verticals[0].id).toEqual(1);
    expect(scope.components[0].id).toEqual(1);
});
it('should save profile data to the API ', function() {

    var deferred = $q.defer();
    deferred.resolve();
    scope.user.updateWorkgroups = function(){ return deferred.promise; };
    scope.saveUserProfile({});
    $httpBackend.expectGET(WEBAPI_URL + 'v2/users/me').respond({});
    $httpBackend.expectPUT(WEBAPI_URL + 'v1/users/me/settings/webui').respond({});
    $httpBackend.flush();
    scope.$digest();

    expect(angular.element('.toast')).toBeDefined();
    expect(angular.element('.toast-message').text()).toEqual('User profile updated');

});`
这就是错误的样子:

Chrome 67.0.3396 (Windows) UserPanelSettingsCtrl should load user settings and profile data from API  FAILED
    Error: Unexpected request: GET /api/web/v2/users/me
    No more request expected
        at $httpBackend (C:/Users/usr/Desktop/Karma Work - Copy/src/webui/public/bower_components/angular-mocks/angular-mocks.js:1419:9)
        at sendReq (C:/Users/usr/Desktop/Karma Work - Copy/src/webui/public/bower_components/angular/angular.js:12027:9)
        at serverRequest (C:/Users/usr/Desktop/Karma Work - Copy/src/webui/public/bower_components/angular/angular.js:11822:16)
        at processQueue (C:/Users/usr/Desktop/Karma Work - Copy/src/webui/public/bower_components/angular/angular.js:16696:28)
        at C:/Users/usr/Desktop/Karma Work - Copy/src/webui/public/bower_components/angular/angular.js:16712:27
        at Scope.$eval (C:/Users/usr/Desktop/Karma Work - Copy/src/webui/public/bower_components/angular/angular.js:17994:28)
        at Scope.$digest (C:/Users/usr/Desktop/Karma Work - Copy/src/webui/public/bower_components/angular/angular.js:17808:31)
        at Scope.$apply (C:/Users/usr/Desktop/Karma Work - Copy/src/webui/public/bower_components/angular/angular.js:18102:24)
        at done (C:/Users/usr/Desktop/Karma Work - Copy/src/webui/public/bower_components/angular/angular.js:12082:47)
        at Array.handleResponse (C:/Users/usr/Desktop/Karma Work - Copy/src/webui/public/bower_components/angular-mocks/angular-mocks.js:1369:9)

我不知道如何着手解决这个问题,我试着通过电话,但我无法缩小问题的范围。可能是一个依赖关系问题,因为我一直在更改依赖关系所在位置的文件结构,并且可能在构建应用程序的grunt文件中遗漏了一些内容。

在调用
saveUserProfile
后,您希望得到
GET
,该文件使用
/api/web/v2/user/me
url调用api。因此,向上移动
$httpBackend.expectGET
,如下所示

it('should save profile data to the API ', function() {
    $httpBackend.expectGET(WEBAPI_URL + 'v2/users/me').respond({});
    $httpBackend.expectPUT(WEBAPI_URL + 'v1/users/me/settings/webui').respond({});

    var deferred = $q.defer();
    deferred.resolve();
    scope.user.updateWorkgroups = function(){ return deferred.promise; };
    scope.saveUserProfile({});

    $httpBackend.flush();
    scope.$digest();

    expect(angular.element('.toast')).toBeDefined();
    expect(angular.element('.toast-message').text()).toEqual('User profile updated');
});

错误是说,在应用程序运行期间,对
/api/web/v2/user/me
发出了一个HTTP调用,但您没有为它定义一个模拟,根据您的测试,这是正确的。在您定义的三个测试中,没有一个是to
/api/web/v2/user/me
忘记在其中添加测试,它现在在那里尝试重新排序api调用,仍然没有得到任何错误更改