AngularJS unit testing with $ httpBackend gives "Error: unexpected request"

I am going to preface this question by saying that I have already received a test to work with my "LoginCtrl", which performs almost the same task. I am sure this is the problem of something very small that I forgot. Thanks in advance for any help :)

I set the expected value / response for httpBackend for my test, but when I ran httpBackend.flush() , it was like I never set the wait.

Test Code:

 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 ", "first_name": "John", "middle_name": "f", "last_name": "Doe", 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); })); }); }); 

Output Answer:

 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 
+6
source share
2 answers

I found out what it was. my register_user() function referenced $scope.user , which was set to the undefined variable: userJohnDoeCredentials (another variable name that I used for my previous test).

I don’t know why my IDE did not complain about me, referring to the undefined variable, and it passed all my jslint tests, so this is also strange, but meh. This is fixed: D Only if now I could get the request layout to return what I want it to ...

+1
source

My first thought is that something makes a request when you instantiate your controller. Perhaps try adding $ httpBackend.flush () after the controller declaration line and see if this allows this solution. Also, if your $ scope. $ Digest should be after $ httpBackend.flush, and not before?

+3
source

Source: https://habr.com/ru/post/953177/


All Articles