jasmine - Unit testing AngularJS with $httpBackend gives "Error: Unexpected Request" -
i'm gonna preface question saying i've gotten test work "loginctrl" performs exact same task. i'm sure issue of small i've overlooked. in advance :)
i've set expected value/response httpbackend test, when run httpbackend.flush(), it's if never set expectation.
testing 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 able register fake user', inject(function () { var resolvedregistration; var cb = function (response) { // expect 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 response:
chrome 29.0.1547 (mac os x 10.8.4) user register registerctrl should able register fake user failed error: unexpected request: post /register no more request expected @ error (<anonymous>) @ $httpbackend (/users/bobothefrofro/development/lr-phoenix/phoenix-client/vendor/angular-mocks/angular-mocks.js:959:9) @ y (/users/bobothefrofro/development/lr-phoenix/phoenix-client/vendor/angular/angular.min.js:64:282) @ g (/users/bobothefrofro/development/lr-phoenix/phoenix-client/vendor/angular/angular.min.js:62:272) @ r (/users/bobothefrofro/development/lr-phoenix/phoenix-client/vendor/angular/angular.min.js:96:140) @ r (/users/bobothefrofro/development/lr-phoenix/phoenix-client/vendor/angular/angular.min.js:96:140) @ /users/bobothefrofro/development/lr-phoenix/phoenix-client/vendor/angular/angular.min.js:97:293 @ object.g.$eval (/users/bobothefrofro/development/lr-phoenix/phoenix-client/vendor/angular/angular.min.js:104:502) @ object.g.$digest (/users/bobothefrofro/development/lr-phoenix/phoenix-client/vendor/angular/angular.min.js:102:419) @ null.<anonymous> (/users/bobothefrofro/development/lr-phoenix/phoenix-client/src/app/user/register/register.spec.js:74:19) error: declaration location @ window.jasmine.window.inject.angular.mock.inject (/users/bobothefrofro/development/lr-phoenix/phoenix-client/vendor/angular-mocks/angular-mocks.js:1781:25) @ null.<anonymous> (/users/bobothefrofro/development/lr-phoenix/phoenix-client/src/app/user/register/register.spec.js:57:54) @ null.<anonymous> (/users/bobothefrofro/development/lr-phoenix/phoenix-client/src/app/user/register/register.spec.js:9:5) @ /users/bobothefrofro/development/lr-phoenix/phoenix-client/src/app/user/register/register.spec.js:1:1
my first thought making request when instantiate controller. maybe try adding $httpbackend.flush() after controller declaration line , see if solves it. also, should $scope.$digest after $httpbackend.flush instead of before?
Comments
Post a Comment