Commit 5bdceaaa210de7186c5207378275988133cf2d2a

Authored by Eric Fernandez
1 parent 09122424e9
Exists in master

archivos unit test

spec/controllerSpec.js
File was created 1 describe('Controladores abm vendedor cobrador', function() {
2
3 var $controller;
4
5 beforeEach(function() {
6 module('focaAbmVendedorCobrador');
7 inject(function(_$controller_) {
8 $controller = _$controller_;
9 });
10 })
11 describe('controlador focaAbmVendedoresCobradoresController', function() {
12
13 var focaBotoneraLateralService = {
14 showSalir: function() { },
15 showPausar: function() { },
16 showCancelar: function() { },
17 showGuardar: function() { }
18 };
19
20 it('existe el controlador focaAbmVendedoresCobradoresController', function() {
21 //act
22 var controlador = $controller('focaAbmVendedoresCobradoresController', {
23 $scope: {},
24 focaAbmVendedorCobradorService: {},
25 $location: {},
26 $filter: {},
27 focaBotoneraLateralService: focaBotoneraLateralService,
28 focaModalService: {}
29 });
30
31 //arrange
32 expect(typeof controlador).toEqual('object');
33 });
34
35 it('la función $scope.editar llama a la url correcta', function() {
36 inject(function($location) {
37
38 //arrange
39 var scope = {};
40 $controller('focaAbmVendedoresCobradoresController', {
41 $scope: scope,
42 focaAbmVendedorCobradorService: {},
43 $location: $location,
44 $filter: {},
45 focaBotoneraLateralService: focaBotoneraLateralService,
46 focaModalService: {}
47 });
48 var paramFake = 1;
49
50 //act
51 scope.editar(paramFake);
52 //arrange
53 expect($location.url()).toEqual('/vendedor-cobrador/' + paramFake);
54 });
55 });
56
57 it('la función $scope.eliminar llama a modal confirmar', function() {
58 inject(function($location) {
59
60 //arrange
61 var scope = {};
62 var focaModalService = {
63 confirm: function() { }
64 }
65 $controller('focaAbmVendedoresCobradoresController', {
66 $scope: scope,
67 focaAbmVendedorCobradorService: {},
68 $location: $location,
69 $filter: {},
70 focaBotoneraLateralService: focaBotoneraLateralService,
71 focaModalService: focaModalService
72 });
73 var paramFake = 1;
74
75 //act
76 spyOn(focaModalService, 'confirm').and.returnValue({ then: function() { } });
77 scope.eliminar(paramFake);
78
79 //arrange
80 expect(focaModalService.confirm).toHaveBeenCalled();
81 });
82 });
83
84 it('función $scope.eliminar llama eliminarVendedorCobrador al confirm ok', function(done) {
85 inject(function($location) {
86
87 //arrange
88 var scope = {};
89 var focaModalService = {
90 confirm: function() { }
91 };
92 var focaAbmVendedorCobradorService = {
93 eliminarVendedorCobrador: function() { }
94 };
95 $controller('focaAbmVendedoresCobradoresController', {
96 $scope: scope,
97 focaAbmVendedorCobradorService: focaAbmVendedorCobradorService,
98 $location: $location,
99 $filter: {},
100 focaBotoneraLateralService: focaBotoneraLateralService,
101 focaModalService: focaModalService
102 });
103 var paramFake = 1;
104 var promesaConfirmar = Promise.resolve(true);
105
106 //act
107 spyOn(focaModalService, 'confirm').and.returnValue(promesaConfirmar);
108 spyOn(focaAbmVendedorCobradorService, 'eliminarVendedorCobrador')
109 .and.returnValue({ then: function() { } });
110 scope.eliminar(paramFake);
111
112 //arrange
113 promesaConfirmar.then(function() {
114 expect(focaAbmVendedorCobradorService.eliminarVendedorCobrador).toHaveBeenCalled();
115 done();
116 });
117 });
118 });
119
120 it('función $scope.resetPage llama a $scope.selectPage', function() {
121
122 //arrange
123 var scope = {};
124 $controller('focaAbmVendedoresCobradoresController', {
125 $scope: scope,
126 focaAbmVendedorCobradorService: {},
127 $location: {},
128 $filter: {},
129 focaBotoneraLateralService: focaBotoneraLateralService,
130 focaModalService: {}
131 });
132
133 //act
134 spyOn(scope, 'selectPage');
135 scope.resetPage();
136
137 //arrange
138 expect(scope.selectPage).toHaveBeenCalled();
139 });
140
141 it('función $scope.search llama a getVendedoresCobradores', function() {
142
143 //arrange
144 var scope = {};
145 var focaAbmVendedorCobradorService = {
146 getVendedoresCobradores: function() { }
147 };
148 $controller('focaAbmVendedoresCobradoresController', {
149 $scope: scope,
150 focaAbmVendedorCobradorService: focaAbmVendedorCobradorService,
151 $location: {},
152 $filter: {},
153 focaBotoneraLateralService: focaBotoneraLateralService,
154 focaModalService: {}
155 });
156
157 //act
158 spyOn(focaAbmVendedorCobradorService, 'getVendedoresCobradores')
159 .and.returnValue({ then: function() { } });
160 scope.search(13);
161
162 //arrange
163 expect(focaAbmVendedorCobradorService.getVendedoresCobradores).toHaveBeenCalled();
164 });
165
166 it('función scope.search llama getVendedoresCobradores y llama resetPage', function(done) {
167
168 //arrange
169 var scope = {};
170 var focaAbmVendedorCobradorService = {
171 getVendedoresCobradores: function() { }
172 };
173 $controller('focaAbmVendedoresCobradoresController', {
174 $scope: scope,
175 focaAbmVendedorCobradorService: focaAbmVendedorCobradorService,
176 $location: {},
177 $filter: {},
178 focaBotoneraLateralService: focaBotoneraLateralService,
179 focaModalService: {}
180 });
181 var promesaVendedores = Promise.resolve({ data: [] });
182
183 //act
184 spyOn(focaAbmVendedorCobradorService, 'getVendedoresCobradores')
185 .and.returnValue(promesaVendedores);
186 spyOn(scope, 'resetPage');
187 scope.vendedoresCobradores = [];
188 scope.search(13);
189
190 //arrange
191 promesaVendedores.then(function() {
192 expect(scope.resetPage).toHaveBeenCalled();
193 done();
194 });
195 });
196 });
197
198 describe('Controlador focaAbmVendedorCobradorController', function() {
199
200 var timeout;
201
202 beforeEach(function() {
203 inject(function($timeout) {
204 timeout = $timeout;
205 });
206 });
207
208 it('existe el controlador focaAbmVendedorCobradorController', function() {
209
210 //act
211 var controlador = $controller('focaAbmVendedorCobradorController', {
212 $scope: {},
213 focaAbmVendedorCobradorService: {
214 getCodigoSiguiente: function() {
215 return {
216 then: function() { }
217 };
218 },
219 getVendedorCobradorById: function() {
220 return {
221 then: function() { }
222 };
223 }
224 },
225 $routeParams: {},
226 focaBotoneraLateralService: {},
227 $timeout: timeout,
228 $uibModal: {},
229 $location: {},
230 focaModalService: {}
231 });
232
233 //assert
234 expect(typeof controlador).toEqual('object');
235 });
236
237 it('la función $scope.guardar llama a guardaVendedorCobrador del servicio', function() {
238 //arrange
239 var scope= {};
240 var focaAbmVendedorCobradorService = {
241 getCodigoSiguiente: function() {
242 return {
243 then: function() { }
244 };
245 },
246 getVendedorCobradorById: function() {
247 return {
248 then: function() { }
249 };
250 },
251 guardarVendedorCobrador: function() { }
252 };
253 $controller('focaAbmVendedorCobradorController', {
254 $scope: scope,
255 focaAbmVendedorCobradorService: focaAbmVendedorCobradorService,
256 $routeParams: {},
257 focaBotoneraLateralService: {},
258 $timeout: timeout,
259 $uibModal: {},
260 $location: {},
261 focaModalService: {}
262 });
263 var responseFake = {
264 then: function() {
265 return {
266 catch: function() { }
267 };
268 }
269 };
270
271 //act
272 spyOn(focaAbmVendedorCobradorService, 'guardarVendedorCobrador')
273 .and.returnValue(responseFake);
274 scope.guardar();
275
276 //assert
277 expect(focaAbmVendedorCobradorService.guardarVendedorCobrador).toHaveBeenCalled();
278 });
279
280 it('la función $scope.guardar llama a guardaVendedorCobrador y edicion true' +
281 'llama a $location.path', function(done)
282 {
283 inject(function($location) {
284
285 //arrange
286 var scope= {};
287 var focaAbmVendedorCobradorService = {
288 getCodigoSiguiente: function() {
289 return {
290 then: function() { }
291 };
292 },
293 getVendedorCobradorById: function() {
294 return {
295 then: function() { }
296 };
297 },
298 guardarVendedorCobrador: function() { }
299 };
300 $controller('focaAbmVendedorCobradorController', {
301 $scope: scope,
302 focaAbmVendedorCobradorService: focaAbmVendedorCobradorService,
303 $routeParams: {},
304 focaBotoneraLateralService: {},
305 $timeout: timeout,
306 $uibModal: {},
307 $location: $location,
308 focaModalService: {}
309 });
310 var promiseFake = Promise.resolve(true, false);
311
312 //act
313 spyOn(focaAbmVendedorCobradorService, 'guardarVendedorCobrador')
314 .and.returnValue(promiseFake);
315 scope.edicion = true;
316 scope.guardar();
317
318 //assert
319 promiseFake.then(function() {
320 expect($location.url()).toEqual('/vendedor-cobrador');
321 done();
322 });
323 });
324 });
325
326 it('la función $scope.guardar llama a guardaVendedorCobrador y scope.edicion false' +
327 'llama a scope.cambiarContraseña', function(done)
328 {
329 //arrange
330 var scope= {};
331 var focaAbmVendedorCobradorService = {
332 getCodigoSiguiente: function() {
333 return {
334 then: function() { }
335 };
336 },
337 getVendedorCobradorById: function() {
338 return {
339 then: function() { }
340 };
341 },
342 guardarVendedorCobrador: function() { }
343 };
344 $controller('focaAbmVendedorCobradorController', {
345 $scope: scope,
346 focaAbmVendedorCobradorService: focaAbmVendedorCobradorService,
347 $routeParams: {},
348 focaBotoneraLateralService: {},
349 $timeout: timeout,
350 $uibModal: {},
351 $location: {},
352 focaModalService: {}
353 });
354 var promiseFake = Promise.resolve(true, false);
355
356 //act
357 spyOn(focaAbmVendedorCobradorService, 'guardarVendedorCobrador')
358 .and.returnValue(promiseFake);
359 spyOn(scope, 'cambiarPassword');
360 scope.edicion = false;
361 scope.guardar();
362
363 //assert
364 promiseFake.then(function() {
365 expect(scope.cambiarPassword).toHaveBeenCalled();
366 done();
367 });
368 });
369
370 it('la función $scope.guardar llama a guardaVendedorCobrador y llama foca modal alert' +
371 'cuando la promsa es rechazada y el error es 409', function(done)
372 {
373 //arrange
374 var scope= {};
375 var focaAbmVendedorCobradorService = {
376 getCodigoSiguiente: function() {
377 return {
378 then: function() { }
379 };
380 },
381 getVendedorCobradorById: function() {
382 return {
383 then: function() { }
384 };
385 },
386 guardarVendedorCobrador: function() { }
387 };
388 var focaModalService = {
389 alert: function() { }
390 };
391 $controller('focaAbmVendedorCobradorController', {
392 $scope: scope,
393 focaAbmVendedorCobradorService: focaAbmVendedorCobradorService,
394 $routeParams: {},
395 focaBotoneraLateralService: {},
396 $timeout: timeout,
397 $uibModal: {},
398 $location: {},
399 focaModalService: focaModalService
400 });
401 var promiseFake = Promise.reject({ status: 409 });
402
403 //act
404 spyOn(focaAbmVendedorCobradorService, 'guardarVendedorCobrador')
405 .and.returnValue(promiseFake);
406 spyOn(focaModalService, 'alert');
407 scope.guardar();
408
409 //assert
410 promiseFake.catch(function() {
411 setTimeout(function() {
412 expect(focaModalService.alert).toHaveBeenCalled();
413 done();
414 }, 100)
415 });
416 });
417
418 it('la función $scope.seleccionarProvincia llama a foca Modal', function() {
419 //arrange
420 var scope= {};
421 var focaAbmVendedorCobradorService = {
422 getCodigoSiguiente: function() {
423 return {
424 then: function() { }
425 };
426 },
427 getVendedorCobradorById: function() {
428 return {
429 then: function() { }
430 };
431 },
432 };
433 var focaModalService = {
434 modal: function() { }
435 };
436 $controller('focaAbmVendedorCobradorController', {
437 $scope: scope,
438 focaAbmVendedorCobradorService: focaAbmVendedorCobradorService,
439 $routeParams: {},
440 focaBotoneraLateralService: {},
441 $timeout: timeout,
442 $uibModal: {},
443 $location: {},
444 focaModalService: focaModalService
445 });
446
447 //act
448 spyOn(focaModalService, 'modal').and.returnValue({ then: function() { } });
449 scope.seleccionarProvincia(13);
450
451 //assert
452 expect(focaModalService.modal).toHaveBeenCalled();
453 });
454
455 it('función $scope.seleccionarLocalidad llama foca alert si no hay provincia', function() {
456 //arrange
457 var scope= {};
458 var focaAbmVendedorCobradorService = {
459 getCodigoSiguiente: function() {
460 return {
461 then: function() { }
462 };
463 },
464 getVendedorCobradorById: function() {
465 return {
466 then: function() { }
467 };
468 },
469 };
470 var focaModalService = {
471 alert: function() { }
472 };
473 $controller('focaAbmVendedorCobradorController', {
474 $scope: scope,
475 focaAbmVendedorCobradorService: focaAbmVendedorCobradorService,
476 $routeParams: {},
477 focaBotoneraLateralService: {},
478 $timeout: timeout,
479 $uibModal: {},
480 $location: {},
481 focaModalService: focaModalService
482 });
483
484 //act
485 spyOn(focaModalService, 'alert');
486 scope.vendedorCobrador.provincia.ID = false;
487 scope.seleccionarLocalidad();
488
489 //assert
490 expect(focaModalService.alert).toHaveBeenCalled();
491 });
492
493 it('función $scope.seleccionarLocalidad llama foca modal', function() {
494 //arrange
495 var scope= {};
496 var focaAbmVendedorCobradorService = {
497 getCodigoSiguiente: function() {
498 return {
499 then: function() { }
500 };
501 },
502 getVendedorCobradorById: function() {
503 return {
504 then: function() { }
505 };
506 },
507 };
508 var focaModalService = {
509 modal: function() { }
510 };
511 $controller('focaAbmVendedorCobradorController', {
512 $scope: scope,
513 focaAbmVendedorCobradorService: focaAbmVendedorCobradorService,
514 $routeParams: {},
515 focaBotoneraLateralService: {},
516 $timeout: timeout,
517 $uibModal: {},
518 $location: {},
519 focaModalService: focaModalService
520 });
521
522 //act
523 spyOn(focaModalService, 'modal').and.returnValue({ then: function() { } });
524 scope.vendedorCobrador.provincia.ID = true;
525 scope.seleccionarLocalidad(13);
526
527 //assert
528 expect(focaModalService.modal).toHaveBeenCalled();
529 });
530
531 it('la función scope.cancelar lleva a location correcte', function() {
532
533 inject(function($location) {
534 //arrange
535 var scope = {}
536 $controller('focaAbmVendedorCobradorController', {
537 $scope: scope,
538 focaAbmVendedorCobradorService: {
539 getCodigoSiguiente: function() {
540 return {
541 then: function() { }
542 };
543 },
544 getVendedorCobradorById: function() {
545 return {
546 then: function() { }
547 };
548 }
549 },
550 $routeParams: {},
551 focaBotoneraLateralService: {},
552 $timeout: timeout,
553 $uibModal: {},
554 $location: $location,
555 focaModalService: {}
556 });
557
558 //act
559 scope.formVendedorCobrador = {
560 $pristine: true
561 };
562 scope.cancelar()
563
564 //assert
565 expect($location.url()).toEqual('/vendedor-cobrador');
566 });
567 });
568
569 it('la funcion scope.next suma uno a scope.focused', function() {
570
571 //arrange
572 var scope = {};
573 $controller('focaAbmVendedorCobradorController', {
574 $scope: scope,
575 focaAbmVendedorCobradorService: {
576 getCodigoSiguiente: function() {
577 return {
578 then: function() { }
579 };
580 },
581 getVendedorCobradorById: function() {
582 return {
583 then: function() { }
584 };
585 }
586 },
587 $routeParams: {},
588 focaBotoneraLateralService: {},
589 $timeout: timeout,
590 $uibModal: {},
591 $location: {},
592 focaModalService: {}
593 });
594
595 //act
596 var esperado = scope.focused + 1;
597 scope.next(13);
598
599 //assert
600 expect(scope.focused).toEqual(esperado);
601 });
602
603 it('la funcion scope.cambiarPassword abre modal', function() {
604
605 //arrange
606 var scope = {};
607 var uibModal = {
608 open: function() { }
609 }
610 $controller('focaAbmVendedorCobradorController', {
611 $scope: scope,
612 focaAbmVendedorCobradorService: {
613 getCodigoSiguiente: function() {
614 return {
615 then: function() { }
616 };
617 },
618 getVendedorCobradorById: function() {
619 return {
620 then: function() { }
621 };
622 }
623 },
624 $routeParams: {},
625 focaBotoneraLateralService: {},
626 $timeout: timeout,
627 $uibModal: uibModal,
628 $location: {},
629 focaModalService: {}
630 });
631 var responseFake = {
632 result: {
633 then: function() { }
634 }
635 };
636
637 //act
638 spyOn(uibModal, 'open').and.returnValue(responseFake);
639 scope.cambiarPassword();
640
641 //assert
642 expect(uibModal.open).toHaveBeenCalled();
643 });
644
645 it('la funcion scope.cambiarPassword abre modal y llama a location cuando edicion es ' +
646 'falso', function(done)
647 {
648 inject(function($location) {
649
650 //arrange
651 var scope = {};
652 var uibModal = {
653 open: function() { }
654 };
655 $controller('focaAbmVendedorCobradorController', {
656 $scope: scope,
657 focaAbmVendedorCobradorService: {
658 getCodigoSiguiente: function() {
659 return {
660 then: function() { }
661 };
662 },
663 getVendedorCobradorById: function() {
664 return {
665 then: function() { }
666 };
667 }
668 },
669 $routeParams: {},
670 focaBotoneraLateralService: {},
671 $timeout: timeout,
672 $uibModal: uibModal,
673 $location: $location,
674 focaModalService: {}
675 });
676 var responseFake = {
677 result: Promise.resolve(true)
678 };
679
680 //act
681 spyOn(uibModal, 'open').and.returnValue(responseFake);
682 scope.edicion = false;
683 scope.cambiarPassword();
684
685 //assert
686 responseFake.result.then(function() {
687 expect($location.url()).toEqual('/vendedor-cobrador');
688 done();
689 });
690 });
691 });
692 });
693 });
694
File was created 1 describe('Rutas de abm vendedor cobrador', function() {
2
3 var route;
4
5 beforeEach(function() {
6 module('focaAbmVendedorCobrador');
7 inject(function($route) {
8 route = $route;
9 });
10 });
11
12 it('ruta /vendedor-cobrador lleva a ruta correcta', function() {
13 //assert
14 expect(route.routes['/vendedor-cobrador'].controller)
15 .toBe('focaAbmVendedoresCobradoresController')
16 expect(route.routes['/vendedor-cobrador'].templateUrl)
17 .toBe('src/views/foca-abm-vendedor-cobrador-listado.html')
18 });
19
20 it('ruta /vendedor-cobrador/:id lleva a ruta correcta', function() {
21 //assert
22 expect(route.routes['/vendedor-cobrador/:id'].controller)
23 .toBe('focaAbmVendedorCobradorController')
24 expect(route.routes['/vendedor-cobrador/:id'].templateUrl)
25 .toBe('src/views/foca-abm-vendedor-cobrador-item.html')
26 });
27 });
28
File was created 1 describe('Servicios abm vendedor cobrador', function() {
2
3 var httpBackend;
4
5 beforeEach(function() {
6 module('focaAbmVendedorCobrador');
7
8 inject(module(function($provide) {
9 $provide.value('API_ENDPOINT', {
10 URL: 'local'
11 });
12 }));
13
14 inject(function($httpBackend) {
15 httpBackend = $httpBackend;
16 });
17 });
18
19 describe('Servicio focaAbmVendedorCobradorService', function() {
20
21 var servicio;
22
23 beforeEach(inject(function(focaAbmVendedorCobradorService) {
24 servicio = focaAbmVendedorCobradorService;
25 }));
26
27 it('Existe el servicio focaAbmVendedorCobradorService', function() {
28 //assert
29 expect(typeof servicio).toEqual('object');
30 });
31
32 it('la función getVendedoresCobradores llama a la ruta correcta', function() {
33 //arrange
34 var result;
35 var fakeResponse = { data: 'test' };
36 var fakeBody = 2;
37 httpBackend.expectPOST('local/vendedor-cobrador/list', { nombre: fakeBody })
38 .respond(fakeResponse);
39
40 //act
41 servicio.getVendedoresCobradores(fakeBody).then(function(data) {
42 result = data.data;
43 });
44 httpBackend.flush();
45
46 //assert
47 expect(result).toEqual(fakeResponse);
48 });
49
50 it('la función getVendedorCobradorById llama a la ruta correcta', function() {
51 //arrange
52 var result;
53 var fakeResponse = { data: 'test' };
54 var fakeParam = 1;
55 httpBackend.expectGET('local/vendedor-cobrador/' + fakeParam).respond(fakeResponse);
56
57 //act
58 servicio.getVendedorCobradorById(fakeParam).then(function(data) {
59 result = data.data;
60 });
61 httpBackend.flush();
62
63 //assert
64 expect(result).toEqual(fakeResponse);
65 });
66
67 it('la función guardarVendedorCobrador llama a la ruta correcta', function() {
68 //arrange
69 var result;
70 var fakeResponse = { data: 'test' };
71 var fakeBody = 1;
72 httpBackend.expectPOST('local/vendedor-cobrador', { vendedorCobrador: fakeBody })
73 .respond(fakeResponse);
74
75 //act
76 servicio.guardarVendedorCobrador(fakeBody).then(function(data) {
77 result = data.data;
78 });
79 httpBackend.flush();
80
81 //assert
82 expect(result).toEqual(fakeResponse);
83 });
84
85 it('la función eliminarVendedorCobrador llama a la ruta correcta', function() {
86 //arrange
87 var result;
88 var fakeResponse = { data: 'test' };
89 var fakeParam = 1;
90 httpBackend.expectDELETE('local/vendedor-cobrador/' + fakeParam)
91 .respond(fakeResponse);
92
93 //act
94 servicio.eliminarVendedorCobrador(fakeParam).then(function(data) {
95 result = data.data;
96 });
97 httpBackend.flush();
98
99 //assert
100 expect(result).toEqual(fakeResponse);
101 });
102
103 it('la función getCodigoSiguiente llama a la ruta correcta', function() {
104 //arrange
105 var result;
106 var fakeResponse = { data: 'test' };
107 httpBackend.expectGET('local/vendedor-cobrador/obtener/siguiente-codigo')
108 .respond(fakeResponse);
109
110 //act
111 servicio.getCodigoSiguiente().then(function(data) {
112 result = data.data;
113 });
114 httpBackend.flush();
115
116 //assert
117 expect(result).toEqual(fakeResponse);
118 });
119 });
120 });
121
1 angular.module('focaAbmVendedorCobrador', []); 1 angular.module('focaAbmVendedorCobrador', ['ngRoute']);
2 2
File was created 1 <html>
2 <head>
3 <link rel="stylesheet" type="text/css" href="node_modules/jasmine-core/lib/jasmine-core/jasmine.css">
4 <meta charset="UTF-8" />
5 </head>
6 <body>
7 <script type="text/javascript" src="node_modules/jasmine-core/lib/jasmine-core/jasmine.js"></script>
8 <script type="text/javascript" src="node_modules/jasmine-core/lib/jasmine-core/jasmine-html.js"></script>
9 <script type="text/javascript" src="node_modules/jasmine-core/lib/jasmine-core/boot.js"></script>
10 <script type="text/javascript" src="node_modules/angular/angular.min.js"></script>
11 <script type="text/javascript" src="node_modules/angular-route/angular-route.min.js"></script>
12 <script type="text/javascript" src="node_modules/angular-mocks/angular-mocks.js"></script>
13 <script type="text/javascript" src="src/js/app.js"></script>
14 <script type="text/javascript" src="src/js/controller.js"></script>
15 <script type="text/javascript" src="src/js/controllerItem.js"></script>
16 <script type="text/javascript" src="src/js/service.js"></script>
17 <script type="text/javascript" src="src/js/route.js"></script>
18 <script type="text/javascript" src="spec/controllerSpec.js"></script>
19 <script type="text/javascript" src="spec/serviceSpec.js"></script>
20 <script type="text/javascript" src="spec/routeSpec.js"></script>
21 </body>
22 </html>
23