簡體   English   中英

AngularJS-單元測試-具有自定義服務的測試控制器

[英]AngularJS - Unit Test - Test Controller With Custom Services

我一直在尋找幾個小時的解決方案,但是我無法使其正常工作。 我有一個控制器定義為:

(function () {
    'use strict';
    angular.module('spaSkeleton.parCCP')
        .controller('ParCCPCtrl', function ($scope, $mdToast, AnosLetivosService, UnidadesOrganicasService, CursosService, RelatoriosService, PareceresService) {
    //my code

並且我想測試該控制器,但是我需要注入所有這些服務。 其中一項服務如下所示:

var app = angular.module('sigq.anosLetivos', []);
app.service('AnosLetivosService', function (Restangular) {
    this.getAnosLetivos = function () {
        return Restangular.all("anos-letivos").getList({"sort": "ano_inicio"});
    };
});

在我的測試文件中,我有這個:

describe('Parecer Controllers', function(){

    beforeEach(module('spaSkeleton.parCCP'));

    beforeEach(function() {
        module('namespace.anosLetivos');
        module('namespace.unidadesOrganicas');
        module('namespace.cursos');
        module('namespace.relatorios');
        module('namespace.pareceres');
        module('namespace.landingPage');
    });


    describe('Parecer Ctrl', function(){
        var scope, ctrl, $httpBackend;

        beforeEach(inject(function(_$httpBackend_, $rootScope, $controller) {
            $httpBackend = _$httpBackend_;
            $httpBackend.expectGET(...).respond(...);

            scope = $rootScope.$new();
            ctrl = $controller('ParCtrl', {$scope: scope});
        }));

    });

});

我想要一些有關如何將這些服務注入控制器的幫助,以便可以對其進行測試。 我已經嘗試了很多東西。 https://docs.angularjs.org/tutorial/step_11這看起來很簡單,但是不起作用,他甚至不注入東西,還是嗎? 我知道本教程中的作品有效,但我不知道如何以及為什么,並且我無法使其在我的項目中起作用。

歡迎任何幫助:D

所以我解決了我的問題,問題是這些服務有一個模塊,我必須將其插入我沒有看到的測試中。

describe('Parecer Controllers', function(){

    beforeEach(module('spaSkeleton.parCCP'));

    beforeEach(function() {
        module('sigq.anosLetivos');
        module('sigq.unidadesOrganicas');
        module('sigq.cursos');
        module('sigq.relatorios');
        module('sigq.pareceres');
        module('restangular');
        module('ngMaterial');
    });

    var $scope;
    var $controller;
    var $mdToast, AnosLetivosService, UnidadesOrganicasService, CursosService, RelatoriosService, PareceresService, Restangular;

    beforeEach(inject(function(_$controller_, _$q_, _AnosLetivosService_, _UnidadesOrganicasService_, _CursosService_,
                               _RelatoriosService_, _PareceresService_, _Restangular_, _$mdToast_) {
        $scope = {};
        $mdToast = _$mdToast_;
        Restangular = _Restangular_;
        $controller = _$controller_;
        AnosLetivosService = _AnosLetivosService_;
        UnidadesOrganicasService = _UnidadesOrganicasService_;
        CursosService = _CursosService_;
        RelatoriosService = _RelatoriosService_;
        PareceresService = _PareceresService_;

        $controller('ParCCPCtrl',
            {
                '$scope': $scope,
                'AnosLetivosService': AnosLetivosService,
                'UnidadesOrganicasService': UnidadesOrganicasService,
                'CursosService': CursosService,
                'RelatoriosService': RelatoriosService,
                'PareceresService': PareceresService,
                '$mdToast': $mdToast
            });
    }));

    it('should make Blog menu item active.', function() {
        expect(1).toEqual(1);
    });
});

所以我需要所有這些代碼來測試我的控制器xD

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM