加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

单元测试AngularJS与$httpBackend给出“错误:意外请求”

发布时间:2020-12-17 07:10:17 所属栏目:安全 来源:网络整理
导读:我要说这个问题,我已经为我的“LoginCtrl”进行了测试,它执行的操作几乎完全相同.我确信这是一个我忽略的非常小的问题.在此先感谢任何帮助:) 我为我的测试设置了httpBackend的预期值/响应,但是当我运行httpBackend.flush()时,就好像我从未设置过期望. 测试代
我要说这个问题,我已经为我的“LoginCtrl”进行了测试,它执行的操作几乎完全相同.我确信这是一个我忽略的非常小的问题.在此先感谢任何帮助:)

我为我的测试设置了httpBackend的预期值/响应,但是当我运行httpBackend.flush()时,就好像我从未设置过期望.

测试代码:

describe('user register',function () {
    var scope,RegisterCtrl,httpBackend,userJohnDoe,userJohnDoeRegistered,Restangular;


    // TEST
    beforeEach(module('LR.User.Register'));


    describe('RegisterCtrl',function () {
        beforeEach(inject(function ($controller,_$httpBackend_,$rootScope,_Restangular_,$state) {
            scope = $rootScope.$new();
            httpBackend = _$httpBackend_;
            Restangular = _Restangular_;

            // Models
            userJohnDoeRegistered = {
                "access_token": "YzEyZDhjNjBlY2EwMTMxMmQzZGIzYWY5NDY4OGYwMjMzMGVjNDU3MDVhY2U0YjJmNDc1ODI3NWU0ODkzZGNkMQ","expires_in": 7200,"token_type": "bearer","scope": null,"refresh_token": "MmFhMTQ5NzU4ODI5ZjE2Mjk3ZjNlYzEwYzJkMjc4M2NkZjY2MjVkMjIwNWQzODUxYWNiYzY3NzIyMzEwYzJhNg","user": {
                    "username": "johndoe","email": "johndoe@test.net","id": 1,"first_name": "John","middle_name": "f","last_name": "Doe","created": "2013-09-04T10:46:10-0500","updated": "2013-09-04T10:46:10-0500"
                },"status": "success","status_code": 200,"status_text": "OK"
            };
            userJohnDoe = {
                "email": "johndoe@test.net",password: 'test123X',passwordSecond: 'test123X',client_id: '1_3b5zgimwg4kkko4wksk4sw0o48040o8ws8og8kg4wsowwkc44s'
            };

            httpBackend.whenPOST('/register',userJohnDoe).respond(userJohnDoeRegistered);


            RegisterCtrl = $controller('RegisterCtrl',{$scope: scope,$state: $state,Restangular: Restangular});
        }));
        afterEach(function () {
            httpBackend.verifyNoOutstandingExpectation();
            httpBackend.verifyNoOutstandingRequest();
        });


        it('should be able to register a fake user',inject(function () {
            var resolvedRegistration;
            var cb = function (response) {
                // Expect the userJohnDoe object
                resolvedRegistration = sanitizeRestangularOne(response);

                console.log(logTestHeader('REGISTRATION RESPONSE') +
                    JSON.stringify(resolvedRegistration,null,'   '));
            };

            // Set credentials
            scope.user = userJohnDoeCredentials;

            // Call login
            var register = scope.register_user().then(function() {
                cb();
            });
            scope.$digest();
            httpBackend.flush();
            expect(resolvedRegistration).toEqual(userJohnDoeRegistered);
        }));
    });


});

输出响应:

Chrome 29.0.1547 (Mac OS X 10.8.4) user register RegisterCtrl should be able to register a fake user FAILED
    Error: Unexpected request: POST /register
    No more request expected
        at Error (<anonymous>)
        at $httpBackend (/Users/bobothefrofro/Development/lr-phoenix/phoenix-client/vendor/angular-mocks/angular-mocks.js:959:9)
        at y (/Users/bobothefrofro/Development/lr-phoenix/phoenix-client/vendor/angular/angular.min.js:64:282)
        at g (/Users/bobothefrofro/Development/lr-phoenix/phoenix-client/vendor/angular/angular.min.js:62:272)
        at r (/Users/bobothefrofro/Development/lr-phoenix/phoenix-client/vendor/angular/angular.min.js:96:140)
        at r (/Users/bobothefrofro/Development/lr-phoenix/phoenix-client/vendor/angular/angular.min.js:96:140)
        at /Users/bobothefrofro/Development/lr-phoenix/phoenix-client/vendor/angular/angular.min.js:97:293
        at Object.g.$eval (/Users/bobothefrofro/Development/lr-phoenix/phoenix-client/vendor/angular/angular.min.js:104:502)
        at Object.g.$digest (/Users/bobothefrofro/Development/lr-phoenix/phoenix-client/vendor/angular/angular.min.js:102:419)
        at null.<anonymous> (/Users/bobothefrofro/Development/lr-phoenix/phoenix-client/src/app/user/register/register.spec.js:74:19)
    Error: Declaration Location
        at window.jasmine.window.inject.angular.mock.inject (/Users/bobothefrofro/Development/lr-phoenix/phoenix-client/vendor/angular-mocks/angular-mocks.js:1781:25)
        at null.<anonymous> (/Users/bobothefrofro/Development/lr-phoenix/phoenix-client/src/app/user/register/register.spec.js:57:54)
        at null.<anonymous> (/Users/bobothefrofro/Development/lr-phoenix/phoenix-client/src/app/user/register/register.spec.js:9:5)
        at /Users/bobothefrofro/Development/lr-phoenix/phoenix-client/src/app/user/register/register.spec.js:1:1

解决方法

我的第一个想法是,当你实例化控制器时,某些东西正在发出请求.也许尝试在控制器声明行之后添加$httpBackend.flush(),看看是否能解决它.另外,你的$scope.$digest应该在$httpBackend.flush之后而不是之前吗?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读