2

Недавно я начал модульное тестирование кода mycripts с использованием карма-жасмина. После создания и запуска тестового примера для службы и простой директивы я создал один тестовый пример для пользовательской директивы, в которой есть один контроллер (который вводит одну услугу) и использует 4 переменных области для общения с внешним миром.Единичное тестирование шаблона директивы шаблона karma-jasmine, html не задано

Это простой единичный тестовый пример, чтобы проверить, оказывает ли директива его шаблон или нет.

Во время работы данного устройства тестового случая, карма бросает некоторой ошибке

09 03 2016 19:59:27.056:INFO [framework.browserify]: bundle built 
09 03 2016 19:59:27.063:INFO [karma]: Karma v0.13.21 server started at http://localhost:9876/ 
09 03 2016 19:59:29.964:INFO [Chrome 49.0.2623 (Linux 0.0.0)]: Connected on socket /#4OCi116hP6TDqCsmAAAA with id manual-1348 
LOG: Object{0: <normal-directive></normal-directive>, length: 1} 
Chrome 49.0.2623 (Linux 0.0.0) normal should render the template FAILED 
Error: [$injector:unpr] Unknown provider: FacadeServiceProvider <- FacadeService 
http://errors.angularjs.org/1.5.0/$injector/unpr?p0=FacadeServiceProvider%20%3C-%20FacadeService 

//some reference to file 
TypeError: Cannot read property 'html' of undefined 
    at Object.<anonymous> (/tmp/5c59a59c62f48798a123b52b0468515b.browserify:476:23 

При отладке это, я узнать, что он рассматривает «нормально-директиву» как обычный текст не как HTML тег.

нормальные-directive.spec.ts

import {appName} from '../../../../main'; 
import NormalController from '../../../../components/normalManager/normalList/NormalController'; 

describe('normalManager.normalList',() => { 
    let $compile:angular.ICompileService, 
     $rootScope:any, 
     template:angular.IAugmentedJQuery, 
     element:angular.IAugmentedJQuery, 
     controller:NormalController, 
     controllerSpy:jasmine.Spy; 

    beforeEach(() => { 
     angular.mock.module(appName); 

     inject((_$compile_:ng.ICompileService, _$rootScope_:ng.IRootScopeService) => { 
      $compile = _$compile_; 
      $rootScope = _$rootScope_; 
     }); 

     template = angular.element('<div normal-directive></div>'); 
     element = $compile(template)($rootScope);//getting error on this line. 
     controller = element.controller('normalList'); 

     $rootScope.$digest(); 
    }); 

    it('should render the component',() => { 
     expect(element.html()).toContain('<!-- normalManager.normalList -->'); 
    }); 
}); 

нормальные-directive.ts

import * as angular from 'angular'; 
import {normalController} from './normalController'; 
import {html} from './normal.html' 

module normal { 
    "use strict"; 
    export class normal { 
     public link: (scope: ng.IScope, element: ng.IAugmentedJQuery, attrs: ng.IAttributes) => void; 
     public template = html; 
     public scope = { 
      ngNormalVariables: '=', 
      ngNormalData: '=', 
      ngDifferentType: '=', 
      ngType: '=' 
     }; 
     public restrict: string = 'EA'; 
     public controller = normalController; 
     public controllerAs: string = 'vm'; 
     public bindToController:boolean = true; 

     constructor() { 
      normal.prototype.link = (scope: ng.IScope, element: ng.IAugmentedJQuery, attrs: ng.IAttributes) => { 

      }; 
     } 

     public static Factory() { 
      var directive =() => { 
       return new normal(); 
      }; 

      directive['$inject'] = []; 
      return directive; 
     } 
    } 
} 

export default normal; 

normalController.ts

import {IfcNormalFacadeService} from '../../../normal_core/services/NormalFacadeService/IfcNormalFacadeService' 
export class normalController { 
    //Variable injection 
    private normalFacadeService: IfcNormalFacadeService; 

    public xVariableVal = null; 
    public yVariableVal = null; 

    //Scope variables 
    private ngNormalData = {x:null, y:null, t:null, z:null}; 
    private ngNormalVariables = {x: [], y:[], t:[], z:[]}; 
    private ngType = null; 
    private ngDifferentType = null; 

    constructor(normalFacadeService: IfcNormalFacadeService) { 
     console.log("Inside Normal controller"); 
     this.normalFacadeService = normalFacadeService; 
    } 

    ....//Remaining code 
} 

Я ссылаюсь на this репо, чтобы написать специальный код для проверки и машинописный код.

Если вам требуется дополнительная информация, сообщите мне. Если вы знаете какой-либо конкретный блог/сайт, чтобы узнать больше о модульном тестировании кармы-жасмина для машинописных текстов, пожалуйста, скажите мне.

Благодарим за то, что вы потратили время на чтение.

С уважением

Аджай

ответ

1

мне нужно сделать макет для facadeService.

Демонстрационные mocks.ts

import {IfcFacadeService} from 'filePath' 

export const facadeServiceMock: IfcFacadeService { 

    methodName:(): any => {}; 

} 

Чтобы использовать этот макет, импортировать его

Demo .html.spec.ts

import {facadeServiceMock} from 'mockPathName' 

beforeEach(()=>{ 
angular.mock.module(appName), {FacadeService: facadeServiceMock}); 
}) 
Смежные вопросы