SlideShare a Scribd company logo
1 of 169
Download to read offline
Test Driven AngularJS
Andy Pliszka	


!
!

@AntiTyping	

AntiTyping.com	

github.com/dracco
Problems
jQuery
• Low-level DOM modification
• Inserting data into DOM
• Extracting data from DOM
• Code duplication
Boilerplate code
• Copy and paste
• jQuery DOM manipulation
• Backbone.js views
• Event handlers
Lack of Structure
• Rails folder structure
• Django folder structure
• Running tests
Imperative code
• GUIs are declarative
• HTML, CSS are declarative
• Front end code is mostly imperative
• Difficult to understand
• Maintenance nightmares
Lack of modularity
• Monolithic applications
• Rigid and interconnected code
• Difficult to test
• Forced to use hight level integration tests
• Large team issues
Testability
• Front end code is poorly tested
• Poor support from libraries
• jQuery
• Backbone.js
• In browser testing
• Lack of command line tools
Problem
Summary
Toolset
node.js
• Platform
• JavaScript

var http = require('http');!
!
http.createServer(!
function (request, response) {!
response.writeHead(200, {'Content-Type': 'text/plain'});!
response.end('Hello Worldn');!
}!
).listen(8000);!
!
console.log('Server running at http://localhost:8000/');

• Google’s V8 JavaScript engine
• Created by Ryan Dahl
npm
• Official package manager for Node.js
• npm search
• npm install
package.json
{
"name": "AngularDo",
"version": "1.0.0",
"dependencies": {
"angular": "~1.0.7",
"json3": "~3.2.4",
"jquery": "~1.9.1",
"bootstrap-sass": "~2.3.1",
"es5-shim": "~2.0.8",
"angular-resource": "~1.0.7",
"angular-cookies": "~1.0.7",
"angular-sanitize": "~1.0.7"
},
"devDependencies": {
"angular-mocks": "~1.0.7",
"angular-scenario": "~1.0.7"
}
}
YOEMAN
Automate
• Repetitive tasks
• Tests
• Compilation of assets
Create
• Bootstrap the app
• Folder structure
• Generators
Development
• Watch files
• Recompile (Sass, CoffeeScript)
• Reload browser
Deploy
• Testing
• Linting and compilation
• Concatenation and minification
• Image optimization
• Versioning
Installation
• brew install nodejs
• npm install -g yo
• npm install -g generator-angular
Yo
create a new web app

• mkdir AngularApp && cd $_
• yo angular
• yo angular:controller
Bower
manage dependencies

• bower search
• bower install
bower.json
{
"name": "AngularDo",
"version": "1.0.0",
"dependencies": {
"angular": "~1.0.7",
"json3": "~3.2.4",
"jquery": "~1.9.1",
"bootstrap-sass": "~2.3.1",
"es5-shim": "~2.0.8",
"angular-resource": "~1.0.7",
"angular-cookies": "~1.0.7",
"angular-sanitize": "~1.0.7"
},
"devDependencies": {
"angular-mocks": "~1.0.7",
"angular-scenario": "~1.0.7"
}
}
Grunt
preview, test, build

• grunt server
• grunt test
• grunt build
Jasmine
• Behavior-driven development framework
• Specs for your JavaScript code
• Write expectations
• Uses matchers
Jasmine Suites
describe("A suite", function() {
var flag;
!
beforeEach(function() {
flag = true;
});
!
it("contains spec with an expectation", function() {
expect(flag).toBe(true);
});
});
Jasmine Expectations
describe("A suite", function() {
it("contains spec with an expectation", function() {
expect(true).toBe(true);
});
});
Jasmine Matchers
expect(a).toBe(b);
expect(a).not.toBe(null);
expect(a).toEqual(12);
expect(null).toBeNull();
!
expect(message).toMatch(/bar/);
!
expect(a.foo).toBeDefined();
expect(a.bar).toBeUndefined();
!
expect(foo).toBeTruthy();
expect(a).toBeFalsy();
!
expect(['foo', 'bar', 'baz']).toContain('bar');
!
expect(bar).toThrow();
Demo
Features
• Display list of tasks
• Add a new task
• Mark task as done
• Add a new task with a priority
• Filter tasks by priority
• Search tasks
• Task counter
Feature UI
Tracker
Setup
Install dependencies
• rvm install 2.0
• gem install compass
• brew install nodejs
• npm install -g bower
• npm install -g yo
• npm install -g generator-angular
• npm install -g karma
Project setup
• mkdir AngularDo
• cd AngularDo
• yo angular AngularDo
yo angular AngularDo
AngularDo app
grunt server
Rails RESTful back-end
• curl -L https://get.rvm.io | bash -s stable
• rvm install 2.0
• git clone git@github.com:dracco/AngularDoStore.git
• cd AngularDoStore
• bundle
• rails s
rails s
Angular front-end
• git clone git@github.com:dracco/AngularDo.git
• cd AngularDo
• npm install
• bower install
• grunt server
Angular front-end
Project structure
./run-e2e-tests.sh
./run-unit-tests.sh
Dev setup
• grunt server
• rails s
• ./run-unit-tests.sh
• ./run-e2e-tests.sh
Feature #1
List of tasks
git checkout -f feature_1_step_0
List of tasks
User story
As a user,
I should be able to see list of tasks,
so I can choose the next task
!

Scenario: Display list of tasks
When I navigate to the task list
Then I should see the list of tasks
e2e scenario
describe("Task List", function() {
it('should display list of tasks', function() {
expect(repeater('tr.item').count()).toBe(3);
});
});
Red scenario
ng-repeat
<tbody>
<tr ng-repeat="task in tasks" class="task">
<td>{{$index + 1}}</td>
<td>{{task.name}}</td>
</tr>
</tbody>
TaskCtrl unit test
!
describe("TaskCtrl", function() {
it('should populate scope with list of tasks',
inject(function ($controller, $rootScope) {
scope = $rootScope.$new();
$controller('TaskCtrl', { $scope: scope });
expect(scope.tasks.length).toEqual(3);
}));
});
Red unit test
TaskCtrl
'use strict';
!
angular.module('AngularDoApp')
.controller('TaskCtrl', function ($scope) {
$scope.tasks = [
{name: 'Task 1'},
{name: 'Task 2'},
{name: 'Task 3'},
];
});

<div class="row" ng-controller="TaskCtrl">
Green TaskCtrl test
Green e2e scenario
List of tasks
All test are green
Feature #1 Summary
• List of tasks (ng-repeat)
• Task list (TaskCtrl)
• e2e scenario
• TaskCtrl unit test
• No low level DOM manipulation (ng-repeat)
Feature #1 Summary
• LiveReload of the browser
• App code watcher
• Unit test watcher
• e2e scenario watcher
Feature #2
Add a new task
git checkout -f feature_2_step_0
Feature UI
User Story
As a user,
I should be able to add a new task,
so I can update my list of tasks
!

Scenario: Add a valid new task
When I add a valid new task
Then I should see the task in the list
!

Scenario: Add an invalid new task
When I add an invalid new task
Then I should see an error message
e2e scenario
describe("Add a new task", function() {
describe("when the new task is valid", function() {
beforeEach(function() {
input('item.name').enter("New item");
element('button.js-add').click();
});
!
it("should add it to the list", function() {
expect(element('tr.task:last').text()).toMatch(/New item/);
expect(repeater('tr.task').count()).toBe(4);
});
!
it('should clear the new item box', function() {
expect(input('item.name').val()).toEqual('');
});
});
...
e2e scenario
describe("Add a new task", function() {
...
!
describe("when the new task is invalid", function() {
beforeEach(function() {
input('item.name').enter("");
element('button.js-add').click();
});
!
it("should leave the task list unchanged", function() {
expect(repeater('tr.item').count()).toBe(3);
});
!
it("should display an error message", function() {
expect(element('div.alert').count()).toBe(1);
});
});
});
Red scenario
ng-model

<input name="name"
ng-model="task.name" required ng-minlength="3" ...>
ng-click
<button ng-click="add(task); task.name = '';"
ng-disabled="form.$invalid" ...>Add</button>
ng-show
<div ng-show="form.name.$dirty &&
form.name.$invalid &&
form.name.$error.minlength" ...>
Task name should be at least 3 characters long.
</div>
Error message
Red scenario
TaskCtrl unit test
describe("add", function() {
var task;
!
it("should adds new task to task list", function() {
task = jasmine.createSpy("task");
scope.add(task);
expect(scope.tasks.length).toEqual(4);
});
});
Red unit test
TaskCtrl
angular.module('AngularDoApp')
.controller('TaskCtrl', function ($scope) {
$scope.tasks = [
{name: 'Task 1'},
{name: 'Task 2'},
{name: 'Task 3'},
!
];
!
$scope.add = function(task) {
var newTask = new Object();
newTask.name = task.name;
$scope.tasks.push(newTask);
};
});
Green unit test
Green e2e scenario
All test are green
Feature #2 Summary
• Dynamic list (ng-repeat)
• Validations (requires, ng-minlength)
• Disabled button (ng-disabled)
• Tests
Feature #3
Mark task as done
git checkout -f feature_3_step_0
Feature UI
User Story
As a user,
I should be able to mark tasks as done,
so I can keep track of completed work
!

Scenario: Mark task as done
When I mark a task as done
Then the task should be remove from the list
!
e2e scenario
describe("Mark task as done", function() {
it("should remove the task from the task list", function() {
element('button.js-done:last').click();
expect(repeater('tr.task').count()).toBe(2);
});
});
Red scenario
ng-click
<td>
<button ng-click="remove($index, task)" class="js-done">
Done
</button>
</td>
Red scenario
remove() unit test
!

describe("remove", function() {
it("should remove the task from task list", function() {
var task = jasmine.createSpy("task");
scope.remove(1, task);
expect(scope.tasks.length).toEqual(2);
});
});
Red unit test
remove()
angular.module('AngularDoApp')
.controller('TaskCtrl', function ($scope) {
...
!
$scope.remove = function(index, task) {
$scope.tasks.splice(index, 1);
};
});
Green unit test
Green e2e scenario
All test are green
Feature #3 Summary
• e2e scenario
• TaskCtrl unit test
• Click handler (ng-click)
Feature #4
Add task with priority
git checkout -f feature_4_step_0
Feature UI
User Story
As a user,
I should be able to set task priority,
so I can keep track of urgent tasks
!

Scenario: Add a task with priority
When I add task with priority
Then the task list should include priorities
!
e2e scenario

!
it("should set priority", function() {
expect(element("span.priority:last").text()).toMatch(/medium/);
});
Red scenario
ng-init
<select ng-init="task.priority = 'high'" ng-model="task.priority">
<option value="high">High</option>
<option value="medium">Medium</option>
<option value="low">Low</option>
</select>
Red scenario
{{task.priority}}
<tr ng-repeat="task in tasks" class="task">
<td>{{$index + 1}}</td>
<td>
{{task.name}}
<span class="priority label">{{task.priority}}</span>
</td>
...
</tr>
Priority unit test
it("should adds new task to task list", function() {
task = {name: 'Task 4', priority: 'high'}
scope.add(task);
expect(scope.tasks.length).toEqual(4);
expect(scope.tasks[3].name).toEqual('Task 4');
expect(scope.tasks[3].priority).toEqual('high');
});
Red unit test
Add priorities
.controller('TaskCtrl', function ($scope) {
$scope.tasks = [
{name: 'Task 1', priority: 'high'},
{name: 'Task 2', priority: 'medium'},
{name: 'Task 3', priority: 'low'}
];
!
$scope.add = function(task) {
var newTask = new Object();
newTask.name = task.name;
newTask.priority = task.priority;
$scope.tasks.push(newTask);
};
!
...
});
Green unit test
Green e2e scenario
All test are green
Feature #5 Complete
Feature #5
Priority filter
git checkout -f feature_5_step_0
Feature UI
User Story
As a user,
I should be filter tasks by priority,
so I can find hight priority tasks
!

Scenario: Priority filter
When I select ‘high’ priority filter
Then I should see only high priority tasks
!
e2e scenario
describe("Filter by priority", function() {
describe("when high priority is selected", function() {
it("should display only high priority tasks", function() {
element("a.priority:contains('high')").click();
expect(repeater('tr.task').count()).toBe(1);
});
});
!
describe("when high priority is selected", function() {
it("should display only medium priority tasks", function() {
element("a.priority:contains('medium')").click();
expect(repeater('tr.task').count()).toBe(1);
});
});
!
...
Red scenario
filter
task.priority == query.priority

<tr ng-repeat="task in tasks | filter:query)" ...>

<li ng-class="{'active': query.priority == ''}">
<a ng-init="query.priority = ''"
ng-click="query.priority = ''; $event.preventDefault()"...>
All
</a>
</li>
Green e2e scenario
All test are green
Feature #5 Complete
Feature #6
Search tasks
git checkout -f feature_6_step_0
Feature UI
User Story
As a user,
I should be able to search tasks,
so I can find important tasks
!

Scenario: Search task
When I search for ‘Task 1’
Then I should see ‘Task 1’ in the list
!
e2e scenario
describe("Task search", function() {
it("should only display task that match the keyword", function() {
input("query.name").enter("Task 1");
expect(repeater('tr.task').count()).toBe(1);
expect(element('tr.task').text()).toMatch(/Task 1/);
});
});
Red scenario
filter:query
<input ng-init="query.name = ''" ng-model="query.name" ...>
!
!
!
!
<button ng-click="query.name =''" ...>Clear</button>
!
!
!
!
<tr ng-repeat="task in tasks | filter:query" class="task">
Green e2e scenario
All test are green
Feature #6 Complete
Feature #7
Persist tasks
git checkout -f feature_7_step_0
User Story
As a user,
I should be able to persist my tasks,
so I can access my task anywhere
!

Scenario: Persist tasks
When I add a new task
Then it should be persisted in the database
!

Scenario: Mark as task as done
When I mark a task as done
Then it should be removed from the database
!
$resource unit tests
!
it("should save the new task", function() {
scope.add(task);
expect($save).toHaveBeenCalled();
});

it("should remove new task from data store", function() {
scope.remove(1, task);
expect(task.$remove).toHaveBeenCalled();
});
Red unit test
$resource
angular.module('AngularDoApp')
.controller('TaskCtrl', function ($scope, Task, $resource) {
...
})
.factory('Task', ['$resource', function($resource){
return $resource('http://localhost:3000/:path/:id', {}, {
query: {method:'GET', params:{path:'tasks.json'}, isArray:true},
get: {method:'GET', params:{path:''}},
save: {method:'POST', params:{path:'tasks.json'}},
remove: {method:'DELETE', params:{path:'tasks'}}
});
}]);;
$save, $remove
$scope.add = function(task) {
var newTask = new Task(); // use to be new Object()
newTask.name = task.name;
newTask.priority = task.priority;
newTask.$save();
$scope.tasks.push(newTask);
};
!
$scope.remove = function(index, task) {
var id = task.url.replace("http://localhost:3000/tasks/", '');
task.$remove({id: id});
$scope.tasks.splice(index, 1);
};
Green unit test
All test are green
Feature #7 Complete
Feature #8
Task counter
git checkout -f feature_8_step_0
Feature UI
User Story
As a user,
I should be see the number of tasks,
so I can estimate amount of outstanding work
!

Scenario: Task counter
When I navigate to home page
Then I should see the number of tasks
e2e scenario

describe("Task counter", function() {
it("should display number of visible tasks", function() {
expect(element(".js-task-counter").text()).toEqual("3 tasks");
});
});
Red e2e scenario
pluralize filter
{{filtered.length | pluralize:'task'}}

<tr ng-repeat="task in filtered = (tasks | filter:query)" ...>
pluralize unit test
describe('pluralizeFilter', function() {
it('should return pluralized number of nouns',
inject(function(pluralizeFilter) {
expect(pluralizeFilter(0, "apple")).toBe('No apples');
expect(pluralizeFilter(1, "apple")).toBe('1 apple');
expect(pluralizeFilter(2, "apple")).toBe('2 apples');
}));
});
Red unit test
pluralize filter
'use strict';
!
angular.module('AngularDoApp')
.filter('pluralize', function() {
return function(number, noun){
if (number == 0)
return "No " + noun + "s";
if (number == 1)
return number + " " + noun;
return number + " " + noun + "s";
}
});
Green unit test
Green e2e scenario
All test are green
Feature #8 Complete
grunt build
Questions?

More Related Content

What's hot

Advanced Jasmine - Front-End JavaScript Unit Testing
Advanced Jasmine - Front-End JavaScript Unit TestingAdvanced Jasmine - Front-End JavaScript Unit Testing
Advanced Jasmine - Front-End JavaScript Unit TestingLars Thorup
 
AngularJS Unit Testing
AngularJS Unit TestingAngularJS Unit Testing
AngularJS Unit TestingPrince Norin
 
AngularJS Testing Strategies
AngularJS Testing StrategiesAngularJS Testing Strategies
AngularJS Testing Strategiesnjpst8
 
Testing in AngularJS
Testing in AngularJSTesting in AngularJS
Testing in AngularJSPeter Drinnan
 
Intro to testing Javascript with jasmine
Intro to testing Javascript with jasmineIntro to testing Javascript with jasmine
Intro to testing Javascript with jasmineTimothy Oxley
 
JavaScript TDD with Jasmine and Karma
JavaScript TDD with Jasmine and KarmaJavaScript TDD with Jasmine and Karma
JavaScript TDD with Jasmine and KarmaChristopher Bartling
 
AngularJS Unit Test
AngularJS Unit TestAngularJS Unit Test
AngularJS Unit TestChiew Carol
 
JavaScript Test-Driven Development with Jasmine 2.0 and Karma
JavaScript Test-Driven Development with Jasmine 2.0 and Karma JavaScript Test-Driven Development with Jasmine 2.0 and Karma
JavaScript Test-Driven Development with Jasmine 2.0 and Karma Christopher Bartling
 
Testing Javascript with Jasmine
Testing Javascript with JasmineTesting Javascript with Jasmine
Testing Javascript with JasmineTim Tyrrell
 
Quick tour to front end unit testing using jasmine
Quick tour to front end unit testing using jasmineQuick tour to front end unit testing using jasmine
Quick tour to front end unit testing using jasmineGil Fink
 
Jquery- One slide completing all JQuery
Jquery- One slide completing all JQueryJquery- One slide completing all JQuery
Jquery- One slide completing all JQueryKnoldus Inc.
 
Javascript Testing with Jasmine 101
Javascript Testing with Jasmine 101Javascript Testing with Jasmine 101
Javascript Testing with Jasmine 101Roy Yu
 
Describe's Full of It's
Describe's Full of It'sDescribe's Full of It's
Describe's Full of It'sJim Lynch
 
Unit testing JavaScript: Jasmine & karma intro
Unit testing JavaScript: Jasmine & karma introUnit testing JavaScript: Jasmine & karma intro
Unit testing JavaScript: Jasmine & karma introMaurice De Beijer [MVP]
 
Jasmine - why JS tests don't smell fishy
Jasmine - why JS tests don't smell fishyJasmine - why JS tests don't smell fishy
Jasmine - why JS tests don't smell fishyIgor Napierala
 
Unit testing JavaScript using Mocha and Node
Unit testing JavaScript using Mocha and NodeUnit testing JavaScript using Mocha and Node
Unit testing JavaScript using Mocha and NodeJosh Mock
 
Unit testing with mocha
Unit testing with mochaUnit testing with mocha
Unit testing with mochaRevath S Kumar
 

What's hot (20)

Advanced Jasmine - Front-End JavaScript Unit Testing
Advanced Jasmine - Front-End JavaScript Unit TestingAdvanced Jasmine - Front-End JavaScript Unit Testing
Advanced Jasmine - Front-End JavaScript Unit Testing
 
AngularJS Unit Testing
AngularJS Unit TestingAngularJS Unit Testing
AngularJS Unit Testing
 
AngularJS Testing Strategies
AngularJS Testing StrategiesAngularJS Testing Strategies
AngularJS Testing Strategies
 
Jasmine BDD for Javascript
Jasmine BDD for JavascriptJasmine BDD for Javascript
Jasmine BDD for Javascript
 
Testing in AngularJS
Testing in AngularJSTesting in AngularJS
Testing in AngularJS
 
Intro to testing Javascript with jasmine
Intro to testing Javascript with jasmineIntro to testing Javascript with jasmine
Intro to testing Javascript with jasmine
 
JavaScript TDD with Jasmine and Karma
JavaScript TDD with Jasmine and KarmaJavaScript TDD with Jasmine and Karma
JavaScript TDD with Jasmine and Karma
 
AngularJS Unit Test
AngularJS Unit TestAngularJS Unit Test
AngularJS Unit Test
 
JavaScript Test-Driven Development with Jasmine 2.0 and Karma
JavaScript Test-Driven Development with Jasmine 2.0 and Karma JavaScript Test-Driven Development with Jasmine 2.0 and Karma
JavaScript Test-Driven Development with Jasmine 2.0 and Karma
 
Testing Javascript with Jasmine
Testing Javascript with JasmineTesting Javascript with Jasmine
Testing Javascript with Jasmine
 
Karma - JS Test Runner
Karma - JS Test RunnerKarma - JS Test Runner
Karma - JS Test Runner
 
Quick tour to front end unit testing using jasmine
Quick tour to front end unit testing using jasmineQuick tour to front end unit testing using jasmine
Quick tour to front end unit testing using jasmine
 
Jquery- One slide completing all JQuery
Jquery- One slide completing all JQueryJquery- One slide completing all JQuery
Jquery- One slide completing all JQuery
 
Javascript Testing with Jasmine 101
Javascript Testing with Jasmine 101Javascript Testing with Jasmine 101
Javascript Testing with Jasmine 101
 
Describe's Full of It's
Describe's Full of It'sDescribe's Full of It's
Describe's Full of It's
 
Full Stack Unit Testing
Full Stack Unit TestingFull Stack Unit Testing
Full Stack Unit Testing
 
Unit testing JavaScript: Jasmine & karma intro
Unit testing JavaScript: Jasmine & karma introUnit testing JavaScript: Jasmine & karma intro
Unit testing JavaScript: Jasmine & karma intro
 
Jasmine - why JS tests don't smell fishy
Jasmine - why JS tests don't smell fishyJasmine - why JS tests don't smell fishy
Jasmine - why JS tests don't smell fishy
 
Unit testing JavaScript using Mocha and Node
Unit testing JavaScript using Mocha and NodeUnit testing JavaScript using Mocha and Node
Unit testing JavaScript using Mocha and Node
 
Unit testing with mocha
Unit testing with mochaUnit testing with mocha
Unit testing with mocha
 

Viewers also liked

Behavior Driven Development with AngularJS & Jasmine
Behavior Driven Development with AngularJS & JasmineBehavior Driven Development with AngularJS & Jasmine
Behavior Driven Development with AngularJS & JasmineRemus Langu
 
10 tips google docs in the classroom
10 tips   google docs in the classroom10 tips   google docs in the classroom
10 tips google docs in the classroomdavebeehre
 
EasyTest Test Automation Tool Introduction
EasyTest Test Automation Tool IntroductionEasyTest Test Automation Tool Introduction
EasyTest Test Automation Tool IntroductionZhu Zhong
 
Testing angular js
Testing angular jsTesting angular js
Testing angular jsgalan83
 
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 jsSlaven Tomac
 
Test-Driven Development with TypeScript+Jasmine+AngularJS
Test-Driven Development with TypeScript+Jasmine+AngularJSTest-Driven Development with TypeScript+Jasmine+AngularJS
Test-Driven Development with TypeScript+Jasmine+AngularJSSmartOrg
 
TDD, unit testing and java script testing frameworks workshop
TDD, unit testing and java script testing frameworks workshopTDD, unit testing and java script testing frameworks workshop
TDD, unit testing and java script testing frameworks workshopSikandar Ahmed
 
Angular 2 - What's new and what's different
Angular 2 - What's new and what's differentAngular 2 - What's new and what's different
Angular 2 - What's new and what's differentPriscila Negreiros
 
Automated Testing With Jasmine, PhantomJS and Jenkins
Automated Testing With Jasmine, PhantomJS and JenkinsAutomated Testing With Jasmine, PhantomJS and Jenkins
Automated Testing With Jasmine, PhantomJS and JenkinsWork at Play
 
Google Analytics Tutorial
Google Analytics TutorialGoogle Analytics Tutorial
Google Analytics TutorialSean Si
 
Test Driven Development (TDD)
Test Driven Development (TDD)Test Driven Development (TDD)
Test Driven Development (TDD)David Ehringer
 
Introduction to Ionic framework
Introduction to Ionic frameworkIntroduction to Ionic framework
Introduction to Ionic frameworkShyjal Raazi
 
Native vs. Hybrid Applications
Native vs. Hybrid ApplicationsNative vs. Hybrid Applications
Native vs. Hybrid ApplicationsCihad Horuzoğlu
 
Angular workflow with gulp.js
Angular workflow with gulp.jsAngular workflow with gulp.js
Angular workflow with gulp.jsCihad Horuzoğlu
 
Hybrid Apps with Angular & Ionic Framework
Hybrid Apps with Angular & Ionic FrameworkHybrid Apps with Angular & Ionic Framework
Hybrid Apps with Angular & Ionic FrameworkCihad Horuzoğlu
 

Viewers also liked (19)

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
 
Behavior Driven Development with AngularJS & Jasmine
Behavior Driven Development with AngularJS & JasmineBehavior Driven Development with AngularJS & Jasmine
Behavior Driven Development with AngularJS & Jasmine
 
10 tips google docs in the classroom
10 tips   google docs in the classroom10 tips   google docs in the classroom
10 tips google docs in the classroom
 
Roteiro de 21 dias na Itália
Roteiro de 21 dias na Itália Roteiro de 21 dias na Itália
Roteiro de 21 dias na Itália
 
EasyTest Test Automation Tool Introduction
EasyTest Test Automation Tool IntroductionEasyTest Test Automation Tool Introduction
EasyTest Test Automation Tool Introduction
 
Testing angular js
Testing angular jsTesting angular js
Testing angular js
 
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
 
Test-Driven Development with TypeScript+Jasmine+AngularJS
Test-Driven Development with TypeScript+Jasmine+AngularJSTest-Driven Development with TypeScript+Jasmine+AngularJS
Test-Driven Development with TypeScript+Jasmine+AngularJS
 
AngularJS Testing
AngularJS TestingAngularJS Testing
AngularJS Testing
 
TDD, unit testing and java script testing frameworks workshop
TDD, unit testing and java script testing frameworks workshopTDD, unit testing and java script testing frameworks workshop
TDD, unit testing and java script testing frameworks workshop
 
Angular 2 - What's new and what's different
Angular 2 - What's new and what's differentAngular 2 - What's new and what's different
Angular 2 - What's new and what's different
 
Automated Testing With Jasmine, PhantomJS and Jenkins
Automated Testing With Jasmine, PhantomJS and JenkinsAutomated Testing With Jasmine, PhantomJS and Jenkins
Automated Testing With Jasmine, PhantomJS and Jenkins
 
Google Analytics Tutorial
Google Analytics TutorialGoogle Analytics Tutorial
Google Analytics Tutorial
 
Test Driven Development (TDD)
Test Driven Development (TDD)Test Driven Development (TDD)
Test Driven Development (TDD)
 
Introduction to Ionic framework
Introduction to Ionic frameworkIntroduction to Ionic framework
Introduction to Ionic framework
 
Native vs. Hybrid Applications
Native vs. Hybrid ApplicationsNative vs. Hybrid Applications
Native vs. Hybrid Applications
 
Modern Frontend
Modern FrontendModern Frontend
Modern Frontend
 
Angular workflow with gulp.js
Angular workflow with gulp.jsAngular workflow with gulp.js
Angular workflow with gulp.js
 
Hybrid Apps with Angular & Ionic Framework
Hybrid Apps with Angular & Ionic FrameworkHybrid Apps with Angular & Ionic Framework
Hybrid Apps with Angular & Ionic Framework
 

Similar to Test-Driven Development of AngularJS Applications

Angularjs Test Driven Development (TDD)
Angularjs Test Driven Development (TDD)Angularjs Test Driven Development (TDD)
Angularjs Test Driven Development (TDD)Anis Bouhachem Djer
 
Testing JavaScript with Jasmine in Rails Applications
Testing JavaScript with Jasmine in Rails Applications Testing JavaScript with Jasmine in Rails Applications
Testing JavaScript with Jasmine in Rails Applications Hector Correa
 
Javascript first-class citizenery
Javascript first-class citizeneryJavascript first-class citizenery
Javascript first-class citizenerytoddbr
 
JavaScript Growing Up
JavaScript Growing UpJavaScript Growing Up
JavaScript Growing UpDavid Padbury
 
Matthew Eernisse, NodeJs, .toster {webdev}
Matthew Eernisse, NodeJs, .toster {webdev}Matthew Eernisse, NodeJs, .toster {webdev}
Matthew Eernisse, NodeJs, .toster {webdev}.toster
 
How Testability Inspires AngularJS Design / Ran Mizrahi
How Testability Inspires AngularJS Design / Ran MizrahiHow Testability Inspires AngularJS Design / Ran Mizrahi
How Testability Inspires AngularJS Design / Ran MizrahiRan Mizrahi
 
Quick tour to front end unit testing using jasmine
Quick tour to front end unit testing using jasmineQuick tour to front end unit testing using jasmine
Quick tour to front end unit testing using jasmineGil Fink
 
Unit Testing Front End JavaScript
Unit Testing Front End JavaScriptUnit Testing Front End JavaScript
Unit Testing Front End JavaScriptFITC
 
Intro To JavaScript Unit Testing - Ran Mizrahi
Intro To JavaScript Unit Testing - Ran MizrahiIntro To JavaScript Unit Testing - Ran Mizrahi
Intro To JavaScript Unit Testing - Ran MizrahiRan Mizrahi
 
Writing testable js [by Ted Piotrowski]
Writing testable js [by Ted Piotrowski]Writing testable js [by Ted Piotrowski]
Writing testable js [by Ted Piotrowski]JavaScript Meetup HCMC
 
Introduction to Protractor
Introduction to ProtractorIntroduction to Protractor
Introduction to ProtractorJie-Wei Wu
 
jQuery & 10,000 Global Functions: Working with Legacy JavaScript
jQuery & 10,000 Global Functions: Working with Legacy JavaScriptjQuery & 10,000 Global Functions: Working with Legacy JavaScript
jQuery & 10,000 Global Functions: Working with Legacy JavaScriptGuy Royse
 
How and why i roll my own node.js framework
How and why i roll my own node.js frameworkHow and why i roll my own node.js framework
How and why i roll my own node.js frameworkBen Lin
 
Unit testing in iOS featuring OCUnit, GHUnit & OCMock
Unit testing in iOS featuring OCUnit, GHUnit & OCMockUnit testing in iOS featuring OCUnit, GHUnit & OCMock
Unit testing in iOS featuring OCUnit, GHUnit & OCMockRobot Media
 

Similar to Test-Driven Development of AngularJS Applications (20)

Angularjs Test Driven Development (TDD)
Angularjs Test Driven Development (TDD)Angularjs Test Driven Development (TDD)
Angularjs Test Driven Development (TDD)
 
Testing JavaScript with Jasmine in Rails Applications
Testing JavaScript with Jasmine in Rails Applications Testing JavaScript with Jasmine in Rails Applications
Testing JavaScript with Jasmine in Rails Applications
 
Javascript first-class citizenery
Javascript first-class citizeneryJavascript first-class citizenery
Javascript first-class citizenery
 
JavaScript Growing Up
JavaScript Growing UpJavaScript Growing Up
JavaScript Growing Up
 
Matthew Eernisse, NodeJs, .toster {webdev}
Matthew Eernisse, NodeJs, .toster {webdev}Matthew Eernisse, NodeJs, .toster {webdev}
Matthew Eernisse, NodeJs, .toster {webdev}
 
Testing in airflow
Testing in airflowTesting in airflow
Testing in airflow
 
How Testability Inspires AngularJS Design / Ran Mizrahi
How Testability Inspires AngularJS Design / Ran MizrahiHow Testability Inspires AngularJS Design / Ran Mizrahi
How Testability Inspires AngularJS Design / Ran Mizrahi
 
NodeJS
NodeJSNodeJS
NodeJS
 
PostgreSQL and PL/Java
PostgreSQL and PL/JavaPostgreSQL and PL/Java
PostgreSQL and PL/Java
 
Quick tour to front end unit testing using jasmine
Quick tour to front end unit testing using jasmineQuick tour to front end unit testing using jasmine
Quick tour to front end unit testing using jasmine
 
ReactJS for Beginners
ReactJS for BeginnersReactJS for Beginners
ReactJS for Beginners
 
Unit Testing Front End JavaScript
Unit Testing Front End JavaScriptUnit Testing Front End JavaScript
Unit Testing Front End JavaScript
 
jQuery Objects
jQuery ObjectsjQuery Objects
jQuery Objects
 
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
 
Intro To JavaScript Unit Testing - Ran Mizrahi
Intro To JavaScript Unit Testing - Ran MizrahiIntro To JavaScript Unit Testing - Ran Mizrahi
Intro To JavaScript Unit Testing - Ran Mizrahi
 
Writing testable js [by Ted Piotrowski]
Writing testable js [by Ted Piotrowski]Writing testable js [by Ted Piotrowski]
Writing testable js [by Ted Piotrowski]
 
Introduction to Protractor
Introduction to ProtractorIntroduction to Protractor
Introduction to Protractor
 
jQuery & 10,000 Global Functions: Working with Legacy JavaScript
jQuery & 10,000 Global Functions: Working with Legacy JavaScriptjQuery & 10,000 Global Functions: Working with Legacy JavaScript
jQuery & 10,000 Global Functions: Working with Legacy JavaScript
 
How and why i roll my own node.js framework
How and why i roll my own node.js frameworkHow and why i roll my own node.js framework
How and why i roll my own node.js framework
 
Unit testing in iOS featuring OCUnit, GHUnit & OCMock
Unit testing in iOS featuring OCUnit, GHUnit & OCMockUnit testing in iOS featuring OCUnit, GHUnit & OCMock
Unit testing in iOS featuring OCUnit, GHUnit & OCMock
 

More from FITC

Cut it up
Cut it upCut it up
Cut it upFITC
 
Designing for Digital Health
Designing for Digital HealthDesigning for Digital Health
Designing for Digital HealthFITC
 
Profiling JavaScript Performance
Profiling JavaScript PerformanceProfiling JavaScript Performance
Profiling JavaScript PerformanceFITC
 
Surviving Your Tech Stack
Surviving Your Tech StackSurviving Your Tech Stack
Surviving Your Tech StackFITC
 
How to Pitch Your First AR Project
How to Pitch Your First AR ProjectHow to Pitch Your First AR Project
How to Pitch Your First AR ProjectFITC
 
Start by Understanding the Problem, Not by Delivering the Answer
Start by Understanding the Problem, Not by Delivering the AnswerStart by Understanding the Problem, Not by Delivering the Answer
Start by Understanding the Problem, Not by Delivering the AnswerFITC
 
Cocaine to Carrots: The Art of Telling Someone Else’s Story
Cocaine to Carrots: The Art of Telling Someone Else’s StoryCocaine to Carrots: The Art of Telling Someone Else’s Story
Cocaine to Carrots: The Art of Telling Someone Else’s StoryFITC
 
Everyday Innovation
Everyday InnovationEveryday Innovation
Everyday InnovationFITC
 
HyperLight Websites
HyperLight WebsitesHyperLight Websites
HyperLight WebsitesFITC
 
Everything is Terrifying
Everything is TerrifyingEverything is Terrifying
Everything is TerrifyingFITC
 
Post-Earth Visions: Designing for Space and the Future Human
Post-Earth Visions: Designing for Space and the Future HumanPost-Earth Visions: Designing for Space and the Future Human
Post-Earth Visions: Designing for Space and the Future HumanFITC
 
The Rise of the Creative Social Influencer (and How to Become One)
The Rise of the Creative Social Influencer (and How to Become One)The Rise of the Creative Social Influencer (and How to Become One)
The Rise of the Creative Social Influencer (and How to Become One)FITC
 
East of the Rockies: Developing an AR Game
East of the Rockies: Developing an AR GameEast of the Rockies: Developing an AR Game
East of the Rockies: Developing an AR GameFITC
 
Creating a Proactive Healthcare System
Creating a Proactive Healthcare SystemCreating a Proactive Healthcare System
Creating a Proactive Healthcare SystemFITC
 
World Transformation: The Secret Agenda of Product Design
World Transformation: The Secret Agenda of Product DesignWorld Transformation: The Secret Agenda of Product Design
World Transformation: The Secret Agenda of Product DesignFITC
 
The Power of Now
The Power of NowThe Power of Now
The Power of NowFITC
 
High Performance PWAs
High Performance PWAsHigh Performance PWAs
High Performance PWAsFITC
 
Rise of the JAMstack
Rise of the JAMstackRise of the JAMstack
Rise of the JAMstackFITC
 
From Closed to Open: A Journey of Self Discovery
From Closed to Open: A Journey of Self DiscoveryFrom Closed to Open: A Journey of Self Discovery
From Closed to Open: A Journey of Self DiscoveryFITC
 
Projects Ain’t Nobody Got Time For
Projects Ain’t Nobody Got Time ForProjects Ain’t Nobody Got Time For
Projects Ain’t Nobody Got Time ForFITC
 

More from FITC (20)

Cut it up
Cut it upCut it up
Cut it up
 
Designing for Digital Health
Designing for Digital HealthDesigning for Digital Health
Designing for Digital Health
 
Profiling JavaScript Performance
Profiling JavaScript PerformanceProfiling JavaScript Performance
Profiling JavaScript Performance
 
Surviving Your Tech Stack
Surviving Your Tech StackSurviving Your Tech Stack
Surviving Your Tech Stack
 
How to Pitch Your First AR Project
How to Pitch Your First AR ProjectHow to Pitch Your First AR Project
How to Pitch Your First AR Project
 
Start by Understanding the Problem, Not by Delivering the Answer
Start by Understanding the Problem, Not by Delivering the AnswerStart by Understanding the Problem, Not by Delivering the Answer
Start by Understanding the Problem, Not by Delivering the Answer
 
Cocaine to Carrots: The Art of Telling Someone Else’s Story
Cocaine to Carrots: The Art of Telling Someone Else’s StoryCocaine to Carrots: The Art of Telling Someone Else’s Story
Cocaine to Carrots: The Art of Telling Someone Else’s Story
 
Everyday Innovation
Everyday InnovationEveryday Innovation
Everyday Innovation
 
HyperLight Websites
HyperLight WebsitesHyperLight Websites
HyperLight Websites
 
Everything is Terrifying
Everything is TerrifyingEverything is Terrifying
Everything is Terrifying
 
Post-Earth Visions: Designing for Space and the Future Human
Post-Earth Visions: Designing for Space and the Future HumanPost-Earth Visions: Designing for Space and the Future Human
Post-Earth Visions: Designing for Space and the Future Human
 
The Rise of the Creative Social Influencer (and How to Become One)
The Rise of the Creative Social Influencer (and How to Become One)The Rise of the Creative Social Influencer (and How to Become One)
The Rise of the Creative Social Influencer (and How to Become One)
 
East of the Rockies: Developing an AR Game
East of the Rockies: Developing an AR GameEast of the Rockies: Developing an AR Game
East of the Rockies: Developing an AR Game
 
Creating a Proactive Healthcare System
Creating a Proactive Healthcare SystemCreating a Proactive Healthcare System
Creating a Proactive Healthcare System
 
World Transformation: The Secret Agenda of Product Design
World Transformation: The Secret Agenda of Product DesignWorld Transformation: The Secret Agenda of Product Design
World Transformation: The Secret Agenda of Product Design
 
The Power of Now
The Power of NowThe Power of Now
The Power of Now
 
High Performance PWAs
High Performance PWAsHigh Performance PWAs
High Performance PWAs
 
Rise of the JAMstack
Rise of the JAMstackRise of the JAMstack
Rise of the JAMstack
 
From Closed to Open: A Journey of Self Discovery
From Closed to Open: A Journey of Self DiscoveryFrom Closed to Open: A Journey of Self Discovery
From Closed to Open: A Journey of Self Discovery
 
Projects Ain’t Nobody Got Time For
Projects Ain’t Nobody Got Time ForProjects Ain’t Nobody Got Time For
Projects Ain’t Nobody Got Time For
 

Recently uploaded

THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATIONTHEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATIONHumphrey A Beña
 
ISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITY
ISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITYISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITY
ISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITYKayeClaireEstoconing
 
Like-prefer-love -hate+verb+ing & silent letters & citizenship text.pdf
Like-prefer-love -hate+verb+ing & silent letters & citizenship text.pdfLike-prefer-love -hate+verb+ing & silent letters & citizenship text.pdf
Like-prefer-love -hate+verb+ing & silent letters & citizenship text.pdfMr Bounab Samir
 
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)lakshayb543
 
Q4 English4 Week3 PPT Melcnmg-based.pptx
Q4 English4 Week3 PPT Melcnmg-based.pptxQ4 English4 Week3 PPT Melcnmg-based.pptx
Q4 English4 Week3 PPT Melcnmg-based.pptxnelietumpap1
 
INTRODUCTION TO CATHOLIC CHRISTOLOGY.pptx
INTRODUCTION TO CATHOLIC CHRISTOLOGY.pptxINTRODUCTION TO CATHOLIC CHRISTOLOGY.pptx
INTRODUCTION TO CATHOLIC CHRISTOLOGY.pptxHumphrey A Beña
 
Full Stack Web Development Course for Beginners
Full Stack Web Development Course  for BeginnersFull Stack Web Development Course  for Beginners
Full Stack Web Development Course for BeginnersSabitha Banu
 
Science 7 Quarter 4 Module 2: Natural Resources.pptx
Science 7 Quarter 4 Module 2: Natural Resources.pptxScience 7 Quarter 4 Module 2: Natural Resources.pptx
Science 7 Quarter 4 Module 2: Natural Resources.pptxMaryGraceBautista27
 
Difference Between Search & Browse Methods in Odoo 17
Difference Between Search & Browse Methods in Odoo 17Difference Between Search & Browse Methods in Odoo 17
Difference Between Search & Browse Methods in Odoo 17Celine George
 
4.18.24 Movement Legacies, Reflection, and Review.pptx
4.18.24 Movement Legacies, Reflection, and Review.pptx4.18.24 Movement Legacies, Reflection, and Review.pptx
4.18.24 Movement Legacies, Reflection, and Review.pptxmary850239
 
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...JhezDiaz1
 
ECONOMIC CONTEXT - LONG FORM TV DRAMA - PPT
ECONOMIC CONTEXT - LONG FORM TV DRAMA - PPTECONOMIC CONTEXT - LONG FORM TV DRAMA - PPT
ECONOMIC CONTEXT - LONG FORM TV DRAMA - PPTiammrhaywood
 
Computed Fields and api Depends in the Odoo 17
Computed Fields and api Depends in the Odoo 17Computed Fields and api Depends in the Odoo 17
Computed Fields and api Depends in the Odoo 17Celine George
 
Earth Day Presentation wow hello nice great
Earth Day Presentation wow hello nice greatEarth Day Presentation wow hello nice great
Earth Day Presentation wow hello nice greatYousafMalik24
 
Grade 9 Q4-MELC1-Active and Passive Voice.pptx
Grade 9 Q4-MELC1-Active and Passive Voice.pptxGrade 9 Q4-MELC1-Active and Passive Voice.pptx
Grade 9 Q4-MELC1-Active and Passive Voice.pptxChelloAnnAsuncion2
 
Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17
Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17
Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17Celine George
 
Keynote by Prof. Wurzer at Nordex about IP-design
Keynote by Prof. Wurzer at Nordex about IP-designKeynote by Prof. Wurzer at Nordex about IP-design
Keynote by Prof. Wurzer at Nordex about IP-designMIPLM
 
ECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptx
ECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptxECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptx
ECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptxiammrhaywood
 

Recently uploaded (20)

THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATIONTHEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
 
ISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITY
ISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITYISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITY
ISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITY
 
Like-prefer-love -hate+verb+ing & silent letters & citizenship text.pdf
Like-prefer-love -hate+verb+ing & silent letters & citizenship text.pdfLike-prefer-love -hate+verb+ing & silent letters & citizenship text.pdf
Like-prefer-love -hate+verb+ing & silent letters & citizenship text.pdf
 
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
 
Model Call Girl in Tilak Nagar Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in Tilak Nagar Delhi reach out to us at 🔝9953056974🔝Model Call Girl in Tilak Nagar Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in Tilak Nagar Delhi reach out to us at 🔝9953056974🔝
 
Q4 English4 Week3 PPT Melcnmg-based.pptx
Q4 English4 Week3 PPT Melcnmg-based.pptxQ4 English4 Week3 PPT Melcnmg-based.pptx
Q4 English4 Week3 PPT Melcnmg-based.pptx
 
INTRODUCTION TO CATHOLIC CHRISTOLOGY.pptx
INTRODUCTION TO CATHOLIC CHRISTOLOGY.pptxINTRODUCTION TO CATHOLIC CHRISTOLOGY.pptx
INTRODUCTION TO CATHOLIC CHRISTOLOGY.pptx
 
Full Stack Web Development Course for Beginners
Full Stack Web Development Course  for BeginnersFull Stack Web Development Course  for Beginners
Full Stack Web Development Course for Beginners
 
Science 7 Quarter 4 Module 2: Natural Resources.pptx
Science 7 Quarter 4 Module 2: Natural Resources.pptxScience 7 Quarter 4 Module 2: Natural Resources.pptx
Science 7 Quarter 4 Module 2: Natural Resources.pptx
 
Difference Between Search & Browse Methods in Odoo 17
Difference Between Search & Browse Methods in Odoo 17Difference Between Search & Browse Methods in Odoo 17
Difference Between Search & Browse Methods in Odoo 17
 
4.18.24 Movement Legacies, Reflection, and Review.pptx
4.18.24 Movement Legacies, Reflection, and Review.pptx4.18.24 Movement Legacies, Reflection, and Review.pptx
4.18.24 Movement Legacies, Reflection, and Review.pptx
 
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
 
YOUVE_GOT_EMAIL_PRELIMS_EL_DORADO_2024.pptx
YOUVE_GOT_EMAIL_PRELIMS_EL_DORADO_2024.pptxYOUVE_GOT_EMAIL_PRELIMS_EL_DORADO_2024.pptx
YOUVE_GOT_EMAIL_PRELIMS_EL_DORADO_2024.pptx
 
ECONOMIC CONTEXT - LONG FORM TV DRAMA - PPT
ECONOMIC CONTEXT - LONG FORM TV DRAMA - PPTECONOMIC CONTEXT - LONG FORM TV DRAMA - PPT
ECONOMIC CONTEXT - LONG FORM TV DRAMA - PPT
 
Computed Fields and api Depends in the Odoo 17
Computed Fields and api Depends in the Odoo 17Computed Fields and api Depends in the Odoo 17
Computed Fields and api Depends in the Odoo 17
 
Earth Day Presentation wow hello nice great
Earth Day Presentation wow hello nice greatEarth Day Presentation wow hello nice great
Earth Day Presentation wow hello nice great
 
Grade 9 Q4-MELC1-Active and Passive Voice.pptx
Grade 9 Q4-MELC1-Active and Passive Voice.pptxGrade 9 Q4-MELC1-Active and Passive Voice.pptx
Grade 9 Q4-MELC1-Active and Passive Voice.pptx
 
Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17
Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17
Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17
 
Keynote by Prof. Wurzer at Nordex about IP-design
Keynote by Prof. Wurzer at Nordex about IP-designKeynote by Prof. Wurzer at Nordex about IP-design
Keynote by Prof. Wurzer at Nordex about IP-design
 
ECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptx
ECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptxECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptx
ECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptx
 

Test-Driven Development of AngularJS Applications