SlideShare una empresa de Scribd logo
1 de 26
Descargar para leer sin conexión
Testing Angular js
@RohanChandane
Overview of Angular js
Once upon a time..
jQuery
- Is good at
- DOM manipulation (selectors)
- Cross browser JavaScript compatibility
- Ajax
..
- Is NOT good at
- Structuring web application
- Separation of concern (mvc)
- Code de-coupling
- Maintaining application state
Emerge of MVC frameworks
MVC
MVC in JavaScript / Angular js
ModelController
Router
View
DOM
User Interaction
Updates Fire Event
Manipulate
Browser Hash
changes
Filters
Services
Constant
Config
How Angular fits in MVC
MVW (Model View Whatever)
- Controller (+ Model) , Directives + Templates (View)
- How other parts fits in angular like routes, services, config, filters, constant
- Dependency Injection & Data-binding
Overview of Unit Testing
What is Unit Testing?
- If I am writing a function, it should return
expected output
- how will I test it?
- by calling it and checking whether its returning expected output
// my function
function add (a, b) {
return a + b;
}
// test for function
expect(add(1,2)).toEqual(3);
What is TDD?
- Writing a unit test first
- Test should fail
- Writing a code for test
- Test should pass
- Refactor
1) expect(add(1,2)).toEqual(3);
3) function add (a, b) {
return a + b;
}
2) Run Test: fail
4) Run Test: Pass
What is BDD?
- In Given situation
- When something happens
- Then expect this
describe("Given particular javascript class", function () {
describe("When add function called with params 1 & 2 respectively", function () {
it("Should return 3", function () {
expect( add(1, 2) ).toEqual(3);
});
});
});
JavaScript Unit Testing frameworks
… and more
What is expected from framework?
Suits
Setup
Specs
Matchers
Spies
Mocks & Stub
Asynchronous support
What Jasmine js provides?
Suits : describe
Setup : beforeEach, afterEach
Specs : it
Matchers : toBe, toEqual, toBeDefined, toBeNull, toBeTruthy, toThrow etc.
Spies : spyOn, toHaveBeenCalled, andCallThrough etc.
Mocks & Stub : andReturn, and.stub etc.
Asynchronous support : done
Spies
In order to test something
- it need to be isolated
- Spies: Replaces entire function
View A
Filter B
Service
C
sortByName()
fetchNames()
Mocks & Stubs
Mocks - Replaces entire object
Stubs - Hijack the return value of the function
When we need what?
describe("Given particular javascript class", function () {
beforeEach( function () {
// initialising or creating instance of JavaScript class
});
describe("When add function called with params 1 & 2 respectively", function () {
var output;
beforeEach( function () {
output = add(1, 2);
});
it("Should return 3", function () {
expect( output ).toEqual(3);
});
});
});
Angular js with jasmine
- Provides angular-mock.js
- Angular has extended jasmine functionality
- Providers support to inject and mock Angular services into unit tests
- Extends core ng services such that they can be inspected and controlled
in a synchronous manner within test code (eg. $httpBackend)
- Installation
- Need to include ‘angular-mock.js’ into test
Code examples
- Controller example
- Directive example
- Service example
- Filter example
Disadvantages with Unit Testing
Can’t catch all the problem
- Config issues
- Integrations issues
We need more tests..
Protractor
- e2e testing framework
- Demo
Disadvantages
- Code is written by someone else and someone else is testing it
- It's time consuming and need to do lot of setup (car example)
- Can't reach to route of problem
- They can be flaky.
Karma
- Collect all test together n run
- Configuration for all testing attribute like browser, file paths etc
Yeoman
- Yeoman angular
- To create angular class and related tests faster
- Ready with basic setup
- Demo
Grunt
- To automate all tests while building
IDE tools
- WebStorm
- Demo

Más contenido relacionado

La actualidad más candente

Introducing Rendr: Run your Backbone.js apps on the client and server
Introducing Rendr: Run your Backbone.js apps on the client and serverIntroducing Rendr: Run your Backbone.js apps on the client and server
Introducing Rendr: Run your Backbone.js apps on the client and server
Spike Brehm
 
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
Igor Bronovskyy
 

La actualidad más candente (20)

IndexedDB - Querying and Performance
IndexedDB - Querying and PerformanceIndexedDB - Querying and Performance
IndexedDB - Querying and Performance
 
Overview of Node JS
Overview of Node JSOverview of Node JS
Overview of Node JS
 
Modern Web Application Development Workflow - EclipseCon Europe 2014
Modern Web Application Development Workflow - EclipseCon Europe 2014Modern Web Application Development Workflow - EclipseCon Europe 2014
Modern Web Application Development Workflow - EclipseCon Europe 2014
 
AngularJS with RequireJS
AngularJS with RequireJSAngularJS with RequireJS
AngularJS with RequireJS
 
Building a real life application in node js
Building a real life application in node jsBuilding a real life application in node js
Building a real life application in node js
 
The AngularJS way
The AngularJS wayThe AngularJS way
The AngularJS way
 
Express node js
Express node jsExpress node js
Express node js
 
Managing JavaScript Dependencies With RequireJS
Managing JavaScript Dependencies With RequireJSManaging JavaScript Dependencies With RequireJS
Managing JavaScript Dependencies With RequireJS
 
Workshop 9: BackboneJS y patrones MVC
Workshop 9: BackboneJS y patrones MVCWorkshop 9: BackboneJS y patrones MVC
Workshop 9: BackboneJS y patrones MVC
 
Workshop Intro: FrontEnd General Overview
Workshop Intro: FrontEnd General OverviewWorkshop Intro: FrontEnd General Overview
Workshop Intro: FrontEnd General Overview
 
Introducing Rendr: Run your Backbone.js apps on the client and server
Introducing Rendr: Run your Backbone.js apps on the client and serverIntroducing Rendr: Run your Backbone.js apps on the client and server
Introducing Rendr: Run your Backbone.js apps on the client and server
 
Vue routing tutorial getting started with vue router
Vue routing tutorial getting started with vue routerVue routing tutorial getting started with vue router
Vue routing tutorial getting started with vue router
 
Workshop 13: AngularJS Parte II
Workshop 13: AngularJS Parte IIWorkshop 13: AngularJS Parte II
Workshop 13: AngularJS Parte II
 
Express js
Express jsExpress js
Express js
 
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
 
Requirejs
RequirejsRequirejs
Requirejs
 
AngularJS Deep Dives (NYC GDG Apr 2013)
AngularJS Deep Dives (NYC GDG Apr 2013)AngularJS Deep Dives (NYC GDG Apr 2013)
AngularJS Deep Dives (NYC GDG Apr 2013)
 
Kickstarting Node.js Projects with Yeoman
Kickstarting Node.js Projects with YeomanKickstarting Node.js Projects with Yeoman
Kickstarting Node.js Projects with Yeoman
 
uRequire@greecejs: An introduction to http://uRequire.org
uRequire@greecejs: An introduction to http://uRequire.orguRequire@greecejs: An introduction to http://uRequire.org
uRequire@greecejs: An introduction to http://uRequire.org
 
Advanced Tips & Tricks for using Angular JS
Advanced Tips & Tricks for using Angular JSAdvanced Tips & Tricks for using Angular JS
Advanced Tips & Tricks for using Angular JS
 

Destacado

Record management system pada java me
Record management system pada java meRecord management system pada java me
Record management system pada java me
Dwi Fahmi
 
Part 1: The Developer Experience (Pivotal Cloud Platform Roadshow)
Part 1: The Developer Experience (Pivotal Cloud Platform Roadshow)Part 1: The Developer Experience (Pivotal Cloud Platform Roadshow)
Part 1: The Developer Experience (Pivotal Cloud Platform Roadshow)
VMware Tanzu
 
Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship
Cloud Foundry and Microservices: A Mutualistic Symbiotic RelationshipCloud Foundry and Microservices: A Mutualistic Symbiotic Relationship
Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship
Matt Stine
 

Destacado (12)

J2ME RMS
J2ME RMSJ2ME RMS
J2ME RMS
 
Record management system pada java me
Record management system pada java meRecord management system pada java me
Record management system pada java me
 
J2ME Lwuit, Storage & Connections (Ft Prasanjit Dey)
J2ME Lwuit, Storage & Connections (Ft   Prasanjit Dey)J2ME Lwuit, Storage & Connections (Ft   Prasanjit Dey)
J2ME Lwuit, Storage & Connections (Ft Prasanjit Dey)
 
.NET Performance Boost
.NET Performance Boost.NET Performance Boost
.NET Performance Boost
 
Responsive web design with Angularjs
Responsive web design with AngularjsResponsive web design with Angularjs
Responsive web design with Angularjs
 
Java Memory Management Tricks
Java Memory Management Tricks Java Memory Management Tricks
Java Memory Management Tricks
 
TDD Basics with Angular.js and Jasmine
TDD Basics with Angular.js and JasmineTDD Basics with Angular.js and Jasmine
TDD Basics with Angular.js and Jasmine
 
Part 1: The Developer Experience (Pivotal Cloud Platform Roadshow)
Part 1: The Developer Experience (Pivotal Cloud Platform Roadshow)Part 1: The Developer Experience (Pivotal Cloud Platform Roadshow)
Part 1: The Developer Experience (Pivotal Cloud Platform Roadshow)
 
Top Legacy Sins
Top Legacy SinsTop Legacy Sins
Top Legacy Sins
 
Angularjs - Unit testing introduction
Angularjs - Unit testing introductionAngularjs - Unit testing introduction
Angularjs - Unit testing introduction
 
Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship
Cloud Foundry and Microservices: A Mutualistic Symbiotic RelationshipCloud Foundry and Microservices: A Mutualistic Symbiotic Relationship
Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship
 
REST vs. Messaging For Microservices
REST vs. Messaging For MicroservicesREST vs. Messaging For Microservices
REST vs. Messaging For Microservices
 

Similar a An Introduction To Testing In AngularJS Applications

Slaven tomac unit testing in angular js
Slaven tomac   unit testing in angular jsSlaven tomac   unit testing in angular js
Slaven tomac unit testing in angular js
Slaven Tomac
 

Similar a An Introduction To Testing In AngularJS Applications (20)

Slaven tomac unit testing in angular js
Slaven tomac   unit testing in angular jsSlaven tomac   unit testing in angular js
Slaven tomac unit testing in angular js
 
JavaCro'14 - Unit testing in AngularJS – Slaven Tomac
JavaCro'14 - Unit testing in AngularJS – Slaven TomacJavaCro'14 - Unit testing in AngularJS – Slaven Tomac
JavaCro'14 - Unit testing in AngularJS – Slaven Tomac
 
Unit Testing and Coverage for AngularJS
Unit Testing and Coverage for AngularJSUnit Testing and Coverage for AngularJS
Unit Testing and Coverage for AngularJS
 
Angular js
Angular jsAngular js
Angular js
 
Javascript tdd byandreapaciolla
Javascript tdd byandreapaciollaJavascript tdd byandreapaciolla
Javascript tdd byandreapaciolla
 
ForwardJS 2017 - Fullstack end-to-end Test Automation with node.js
ForwardJS 2017 -  Fullstack end-to-end Test Automation with node.jsForwardJS 2017 -  Fullstack end-to-end Test Automation with node.js
ForwardJS 2017 - Fullstack end-to-end Test Automation with node.js
 
Introduction to Angular js 2.0
Introduction to Angular js 2.0Introduction to Angular js 2.0
Introduction to Angular js 2.0
 
Introduction to AngularJS For WordPress Developers
Introduction to AngularJS For WordPress DevelopersIntroduction to AngularJS For WordPress Developers
Introduction to AngularJS For WordPress Developers
 
Angular for Java Enterprise Developers: Oracle Code One 2018
Angular for Java Enterprise Developers: Oracle Code One 2018Angular for Java Enterprise Developers: Oracle Code One 2018
Angular for Java Enterprise Developers: Oracle Code One 2018
 
"Angular.js Concepts in Depth" by Aleksandar Simović
"Angular.js Concepts in Depth" by Aleksandar Simović"Angular.js Concepts in Depth" by Aleksandar Simović
"Angular.js Concepts in Depth" by Aleksandar Simović
 
AngularJs Crash Course
AngularJs Crash CourseAngularJs Crash Course
AngularJs Crash Course
 
Introduction to AngularJS
Introduction to AngularJSIntroduction to AngularJS
Introduction to AngularJS
 
AngularJs Superheroic JavaScript MVW Framework Services by Miracle Studios
AngularJs Superheroic JavaScript MVW Framework Services by Miracle StudiosAngularJs Superheroic JavaScript MVW Framework Services by Miracle Studios
AngularJs Superheroic JavaScript MVW Framework Services by Miracle Studios
 
Coffee@DBG - Exploring Angular JS
Coffee@DBG - Exploring Angular JSCoffee@DBG - Exploring Angular JS
Coffee@DBG - Exploring Angular JS
 
Good karma: UX Patterns and Unit Testing in Angular with Karma
Good karma: UX Patterns and Unit Testing in Angular with KarmaGood karma: UX Patterns and Unit Testing in Angular with Karma
Good karma: UX Patterns and Unit Testing in Angular with Karma
 
AngularJS.part1
AngularJS.part1AngularJS.part1
AngularJS.part1
 
Marrying angular rails
Marrying angular railsMarrying angular rails
Marrying angular rails
 
Angular beans
Angular beansAngular beans
Angular beans
 
Angular Js Basics
Angular Js BasicsAngular Js Basics
Angular Js Basics
 
Angular js 2.0
Angular js 2.0Angular js 2.0
Angular js 2.0
 

Más de Rohan Chandane (11)

Agile Maturity Model, Certified Scrum Master!
Agile Maturity Model, Certified Scrum Master!Agile Maturity Model, Certified Scrum Master!
Agile Maturity Model, Certified Scrum Master!
 
Agile & Scrum, Certified Scrum Master! Crash Course
Agile & Scrum,  Certified Scrum Master! Crash CourseAgile & Scrum,  Certified Scrum Master! Crash Course
Agile & Scrum, Certified Scrum Master! Crash Course
 
Agile :what i learnt so far
Agile :what i learnt so farAgile :what i learnt so far
Agile :what i learnt so far
 
Node js
Node jsNode js
Node js
 
Sencha / ExtJS : Object Oriented JavaScript
Sencha / ExtJS : Object Oriented JavaScriptSencha / ExtJS : Object Oriented JavaScript
Sencha / ExtJS : Object Oriented JavaScript
 
TIBCO General Interface - CSS Guide
TIBCO General Interface - CSS GuideTIBCO General Interface - CSS Guide
TIBCO General Interface - CSS Guide
 
Blogger's Park Presentation (Blogging)
Blogger's Park Presentation (Blogging)Blogger's Park Presentation (Blogging)
Blogger's Park Presentation (Blogging)
 
J2ME GUI Programming
J2ME GUI ProgrammingJ2ME GUI Programming
J2ME GUI Programming
 
Parsing XML in J2ME
Parsing XML in J2MEParsing XML in J2ME
Parsing XML in J2ME
 
J2ME IO Classes
J2ME IO ClassesJ2ME IO Classes
J2ME IO Classes
 
Java2 MicroEdition-J2ME
Java2 MicroEdition-J2MEJava2 MicroEdition-J2ME
Java2 MicroEdition-J2ME
 

Último

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 

Último (20)

Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 

An Introduction To Testing In AngularJS Applications

  • 3. Once upon a time.. jQuery - Is good at - DOM manipulation (selectors) - Cross browser JavaScript compatibility - Ajax
  • 4. .. - Is NOT good at - Structuring web application - Separation of concern (mvc) - Code de-coupling - Maintaining application state
  • 5. Emerge of MVC frameworks
  • 6. MVC
  • 7. MVC in JavaScript / Angular js ModelController Router View DOM User Interaction Updates Fire Event Manipulate Browser Hash changes Filters Services Constant Config
  • 8. How Angular fits in MVC MVW (Model View Whatever) - Controller (+ Model) , Directives + Templates (View) - How other parts fits in angular like routes, services, config, filters, constant - Dependency Injection & Data-binding
  • 10. What is Unit Testing? - If I am writing a function, it should return expected output - how will I test it? - by calling it and checking whether its returning expected output // my function function add (a, b) { return a + b; } // test for function expect(add(1,2)).toEqual(3);
  • 11. What is TDD? - Writing a unit test first - Test should fail - Writing a code for test - Test should pass - Refactor 1) expect(add(1,2)).toEqual(3); 3) function add (a, b) { return a + b; } 2) Run Test: fail 4) Run Test: Pass
  • 12. What is BDD? - In Given situation - When something happens - Then expect this describe("Given particular javascript class", function () { describe("When add function called with params 1 & 2 respectively", function () { it("Should return 3", function () { expect( add(1, 2) ).toEqual(3); }); }); });
  • 13. JavaScript Unit Testing frameworks … and more
  • 14. What is expected from framework? Suits Setup Specs Matchers Spies Mocks & Stub Asynchronous support
  • 15. What Jasmine js provides? Suits : describe Setup : beforeEach, afterEach Specs : it Matchers : toBe, toEqual, toBeDefined, toBeNull, toBeTruthy, toThrow etc. Spies : spyOn, toHaveBeenCalled, andCallThrough etc. Mocks & Stub : andReturn, and.stub etc. Asynchronous support : done
  • 16. Spies In order to test something - it need to be isolated - Spies: Replaces entire function View A Filter B Service C sortByName() fetchNames()
  • 17. Mocks & Stubs Mocks - Replaces entire object Stubs - Hijack the return value of the function
  • 18. When we need what? describe("Given particular javascript class", function () { beforeEach( function () { // initialising or creating instance of JavaScript class }); describe("When add function called with params 1 & 2 respectively", function () { var output; beforeEach( function () { output = add(1, 2); }); it("Should return 3", function () { expect( output ).toEqual(3); }); }); });
  • 19. Angular js with jasmine - Provides angular-mock.js - Angular has extended jasmine functionality - Providers support to inject and mock Angular services into unit tests - Extends core ng services such that they can be inspected and controlled in a synchronous manner within test code (eg. $httpBackend) - Installation - Need to include ‘angular-mock.js’ into test
  • 20. Code examples - Controller example - Directive example - Service example - Filter example
  • 21. Disadvantages with Unit Testing Can’t catch all the problem - Config issues - Integrations issues
  • 22. We need more tests.. Protractor - e2e testing framework - Demo Disadvantages - Code is written by someone else and someone else is testing it - It's time consuming and need to do lot of setup (car example) - Can't reach to route of problem - They can be flaky.
  • 23. Karma - Collect all test together n run - Configuration for all testing attribute like browser, file paths etc
  • 24. Yeoman - Yeoman angular - To create angular class and related tests faster - Ready with basic setup - Demo
  • 25. Grunt - To automate all tests while building