单元测试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之后而不是之前吗?
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |