with unit tutorial test karma e2e and unit-testing typescript jasmine karma-runner angular-directive

unit-testing - unit - testing karma jasmine



unidad de prueba mecanografía directiva plantilla karma-jazmín, html no está definido (1)

Recientemente comencé pruebas unitarias en mi código de mecanografía usando karma-jazmín. Después de crear y ejecutar el caso de prueba para un servicio y una directiva simple, creé un caso de prueba para una directiva personalizada que tiene un controlador (que está inyectando un servicio) y está usando 4 variables de alcance para comunicarse con el mundo exterior.

Es un caso simple de prueba unitaria para verificar si la directiva está procesando su plantilla o no.

Mientras se ejecuta este caso de prueba unitaria, el karma arroja algún error

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

Al depurarlo, me doy cuenta de que está considerando la "norma-directiva" como texto normal, no como una etiqueta html.

normal-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 -->''); }); });

normal-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 }

Me refiero a este repositorio para escribir el caso de prueba y el código de la directiva personalizada mecanografiada.

Si necesita más información, dígame. Si conoce algún blog / sitio concreto para obtener más información sobre la prueba de unidad de karma-jazmín para mecanografiar, por favor dígame.

Gracias por darnos tu precioso tiempo al leerlo.

Saludos

Ajay


Necesitaba hacer un simulacro para facadeService.

Demo mocks.ts

import {IfcFacadeService} from ''filePath'' export const facadeServiceMock: IfcFacadeService { methodName: (): any => {}; }

Para usar este simulacro, impórtelo

Demo .html.spec.ts

import {facadeServiceMock} from ''mockPathName'' beforeEach(()=>{ angular.mock.module(appName), {FacadeService: facadeServiceMock}); })