Недавно я начал модульное тестирование кода 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 репо, чтобы написать специальный код для проверки и машинописный код.
Если вам требуется дополнительная информация, сообщите мне. Если вы знаете какой-либо конкретный блог/сайт, чтобы узнать больше о модульном тестировании кармы-жасмина для машинописных текстов, пожалуйста, скажите мне.
Благодарим за то, что вы потратили время на чтение.
С уважением
Аджай