更新angular-route 1.5.0到1.5.1时的Karma错误

时间:2016-04-04 14:39:49

标签: javascript angularjs unit-testing karma-jasmine

当我将angular-route 1.5.0更新为1.5.1时,出现错误:

角度单位测试:错误:意外请求:GET

当我启动业力时,我有一条错误消息:

  

1)调用getAll方法        [应用类别]        错误:意外请求:GET http://myapp.com/app-category?is_active=true不再需要更多请求   /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();
    });

});

角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);

我试图重新说明:

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

由此:

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

但我有同样的错误

我使用茉莉2.4.1,angularjs 1.5.3,karma 0.13.0

2 个答案:

答案 0 :(得分:2)

角度团队已经知道这个错误。 此错误的解决方法是为$ templateCache定义一个虚拟模板。
有关详细信息:link

答案 1 :(得分:1)

我用angularjs 1.5.5更新,它有效!

来自CHANGELOG.md 1.5.5(发布2016-04-18):

  

" ngRoute:允许ngView包含在异步加载中   模板急切地加载$ route,可能会破坏测试,因为它可能会   请求root或默认路由模板($ httpBackend   什么都不知道。

     

它将重新应用于v1.6.x,并带有更改通知和   可能是一种在测试中禁用该功能的方法。"