Angularjs   发布时间:2022-04-20  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了单元测试AngularJS与$httpBackend给出“错误:意外请求”大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我要说这个问题,我已经为我的“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之后而不是之前吗?

大佬总结

以上是大佬教程为你收集整理的单元测试AngularJS与$httpBackend给出“错误:意外请求”全部内容,希望文章能够帮你解决单元测试AngularJS与$httpBackend给出“错误:意外请求”所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: