Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Karma Error when update angular-route 1.5.0 to 1.5.1

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

like image 406
Jérémie Chazelle Avatar asked Apr 04 '16 14:04

Jérémie Chazelle


2 Answers

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

like image 119
frulo Avatar answered Sep 30 '22 19:09

frulo


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."

like image 34
Jérémie Chazelle Avatar answered Sep 30 '22 19:09

Jérémie Chazelle