Tuesday, April 19, 2016

Karma Error when update angular-route 1.5.0 to 1.5.1

Leave a Comment

When I updated angular-route 1.5.0 to 1.5.1, I have an error :

Angular Unit Test: Error: Unexpected request: GET

When I launch karma, I have an error message :

1) Call getAll method [App Category] Error: Unexpected request: GET http://myapp.com/app-category?is_active=true No more request expected in /node_modules/angular-mocks/angular-mocks.js

app_category.model.test.js

describe('[App Category]', function () {      beforeEach(module('myApp'));      var $httpBackend, HttpService, AppCategory;      beforeEach(inject(function (_$httpBackend_, _HttpService_, _AppCategory_) {         $httpBackend = _$httpBackend_;         HttpService  = _HttpService_;          AppCategory = _AppCategory_;     }));      it('Call getAll method', function () {         var app_category = new AppCategory();          HttpService.mock('GET', 'app-category?is_active=true', 200, [{ code: 'TRAVEL', name: 'Travel' }]);          app_category.getAll({ is_active: true }).then(function (request) {             expect(request.data[0].code).toBe('TRAVEL');             expect(request.data[0].name).toBe('Travel');         });          $httpBackend.flush();     });  }); 

angular-mockHTTP.js

(function (angular) {     'use strict';      angular.module('ngMockHTTP', []).service('HttpService', function ($httpBackend, config) {         this.endpoint = config.api.endpoint;          this.mock = function (method, url, status, response) {             switch (method) {                 case 'GET':                     $httpBackend                         .expectGET(this.endpoint + url)                         .respond(status, response);                 break;                 case 'POST':                     $httpBackend                         .expectPOST(this.endpoint + url)                         .respond(status, response);                 break;                 case 'PUT':                     $httpBackend                         .expectPUT(this.endpoint + url)                         .respond(status, response);                 break;                 case 'PATCH':                     $httpBackend                         .expectPATCH(this.endpoint + url)                         .respond(status, response);                 break;                 case 'DELETE':                     $httpBackend                         .expectDELETE(this.endpoint + url)                         .respond(status, response);                 break;             }         };     }); })(angular); 

I tried to remplace :

case 'GET':     $httpBackend         .expectGET(this.endpoint + url)         .respond(status, response); break; 

by this :

case 'GET':     $httpBackend         .whenGET(this.endpoint + url, {     }).respond(function(){ return [200, response]}); break; 

But I have the same error

I use jasmine 2.4.1, angularjs 1.5.3, karma 0.13.0

2 Answers

Answers 1

This error is already known by the angular team. The workaround for this bug is to define a dummy template to the $templateCache.
For more information: link

Answers 2

I updated with angularjs 1.5.5, it works !

from CHANGELOG.md 1.5.5 (release 2016-04-18) :

"ngRoute: allow ngView to be included in an asynchronously loaded template Eagerly loading $route, could break tests, because it might request the root or default route template (something $httpBackend would know nothing about).

It will be re-applied for v1.6.x, with a breaking change notice and possibly a way to disable the feature in tests."

If You Enjoyed This, Take 5 Seconds To Share It

0 comments:

Post a Comment