SlideShare a Scribd company logo
1 of 45
Good Karma:
UX Patterns and Unit Testing in Angular with Karma
Laura Ferguson and Boris Kan @ Create, inc, 2015
http://goo.gl/hurhTR
AngularJS:
MVW
http://stackoverflow.com/questions/13329485/mvw-what-does-it-stand-for
http://goo.gl/hurhTR
Why AngularJS?
● Open Source Web Application Framework
● Maintained by Google & individual developers
● Addresses challenges encountered in developing single-
page apps
● Embraces Model-View-Controller → Now called MVW
● Provides rich internet components
● Mobile(ish) friendly & responsive
http://en.wikipedia.org/wiki/AngularJS
http://goo.gl/hurhTR
By Ben Nadel www.bennadel.com
Bind an element to items in a list, one at a time:
<ul>
<li ng-repeat="boat in boats">
<span>{{boat.name}}</span>
</li>
</ul>
*While doable, try not to use ids and classes
UI Patterns in Angular:
Bind an element to a variable in the controller:
<span ng-bind="mobileApp"></span> or
<span>{{mobileApp}}</span>
Bind an element by ng-click
<button ng-click="next()"></button>
What is scope?
And what is $scope?
In Computer Science (cs) a scope may contains a set of variables that may
have a specific value when a function is called.
In angular, $scope is the model that contains the values displayed by the
view and controlled by the controller.
ex: $scope.model.address = “123 45th St NW DC 20012”;
https://docs.angularjs.org/guide/scope
What is a controller?
Think of a controller as the wizard (as in the wizard
of oz) deciding what should happen after the view
(the gui/the html) reports a user interaction back to
the controller.
Let’s take a closer look...
For Example:
.controller('MainController',
['$scope', '$document', '$window', '$rootScope', 'deviceReady', 'getCurrentPosition', 'getWeather',
function ($scope, $document, $window, $rootScope, deviceReady, getCurrentPosition, getWeather) {
$scope.model = { "address": "555 Pennsylvania Ave NW, Washington, DC 20001",
"latitude": 0, "longitude": 0, "walkAddress": "", "googleAddress": "", "currentPosition": "",
"location":"", "weather":"", "markers":"" };
$scope.changeText = function () {
var textElement = document.getElementById("householdIncome");
textElement.innerHTML = 'I am a changed div!';
console.log(textElement.innerHTML);
};
Now let’s make something happen
$scope.walkAddressLookup = function () {
if ($scope.model.address) {
var address = $scope.model.address;
address = address.replace(',', '');
//for walkscore
return address.split(' ').join('-');
}
};
$scope.loadAddresses = function () {
getCurrentPosition(function (position) {
$scope.model.currentPosition = position;
$scope.model.latitude = position.coords.latitude;
$scope.model.longitude = position.coords.longitude;
getWeather(
position.coords.latitude,
position.coords.longitude,
function(location, weather){
$scope.model.location = location;
$scope.model.weather = weather;
});
});
if ($scope.model.address) {
//for walkscore
$scope.model.walkAddress = $scope.walkAddressLookup();
}
};
Testing
Isn’t that a backend thing?
Types of testing
Unit Testing -- Developer writes small automated tests for each unit of functionality
Quality Assurance testing (Each developer)
Integration Testing & E2E -- All components work together as expected (Lead Developer / UX)
Quality Assurance Testing -- Systematic objective testing of a working release following a thorough
test plan.
Load Testing -- Automated testing of system with simulated users and/or simulated traffic.
Acceptance (Success) Testing -- A knowledgeable user can use the system to complete the intended
tasks
Alpha Testing -- Typical users are given the opportunity to use the system, observed while doing so,
and issues are noted and fixed by an objective observer (QA)
Beta Testing -- A small number of users are given complete access to the system and asked for
feedback periodically.
What is Test Driven Development?
● Very short cycles, write tiny tests, and test everything.
● Run a continuous integration server and maintain the integrity of
your tests at all time.
● Keeps your code base fully functional.
http://en.wikipedia.org/wiki/Test-driven_development
Why front-end e2e testing?
Practical reasons
● Get notified when backend
changes break the gui
● Get notified when “simple” front-
end changes break usability
● Get notified when your app
doesn’t work right on some
browsers (and hopefully
sometime soon on devices)
Or just for better “Cred”
● Validation is a good practice.
● Earn some ’spect from backend
developers (’sup)
● Think big and think ahead.
For Example:
it('should have be able to find the title', function() {
var docs = element(by.css('.navbar-brand-center'));
expect(docs.getText()).toContain('Good Karma Commutability');
});
Acceptance Tests
Best Commute: Show commutability at any location
● Get current location
● Get commuting data for that location
● Show distance to metro, bus, retail(?)
● Show commuting time
What’s Next
1) Write a basic test that fails because no the
code doesn’t exist yet.
2) Then make the test pass by writing the code.
3) Rinse / Repeat (with new tests)
// spec.js
describe('Protractor Demo App', function() {
it('should have a title', function() {
browser.get('http://localhost:8000');
expect(browser.getTitle()).toEqual('Property Lookup');
});
}
Write an E2E Test
Acceptance Test: The app should display a title
Pass or Fail?
Acceptance Test: user can edit text field
in your spec.js
it('should be able to edit the text field', function() {
var textArea = element(by.model('areaText'));
textArea.sendKeys("Hi", protractor.Key.ENTER);
expect(textArea.getAttribute('value')).toContain('Hi!');
});
In your html application
<textarea ng-model="'areaText'" readonly><textarea>
It failed! (let’s drown our sorrow with a beer!!!)
the Corrected Code would be:
In your html application
<textarea ng-model="'areaText'"><textarea>
Pass or Fail?
Acceptance Test: user can edit text field
in your spec.js
it('should be able to edit the text field', function() {
var textArea = element(by.model('areaText'));
textArea.sendKeys("Hi", protractor.Key.ENTER);
expect(textArea.getAttribute('value')).toContain('Hi!');
});
In your html application
<textarea ng-model="'areaText'"><textarea>
It passed! (let’s celebrate this with a beer!!!)
sip sip sip. Now, on to the next one!
Bind an element to items in a list, one at a time:
element(
by.repeater(boat in boats'
).row(0).column('name') );
<ul>
<li ng-repeat="boat in boats">
<span>{{boat.name}}</span>
</li>
</ul>
*While doable, try not to use ids and classes
Capturing UI Patterns in Angular in Tests:
Bind an element to a variable in the controller:
element( by.binding('mobileApp') );
<span ng-bind="mobileApp"></span> or
<span>{{mobileApp}}</span>
Bind an element by ng-click
element.all(
by.css('ng-click="issue()"]')
).click();
<button ng-click="next()"></button>
Hands On:
Try the
Example
#1: Build it with Angular
http://goo.gl/hurhTR
//install the requirements -- get node
curl -L https://npmjs.com/install.sh | sh
sudo npm install -g bower yo gulp generator-mobileangularui
sudo npm install -g phonegap
sudo npm install -g ios-deploy
sudo npm install -g ios-sim
bower install --save font-awesome#4.2
//create folders and directories
mkdir mobilephonegap
cd mobilephonegap
http://mobileangularui.com/blog/your-first-phonegap-app-with-mobile-angular-ui/
Try out the working code
git clone https://github.com/CreateIO/propertyLookup.git
git checkout -b example
git pull origin example
cordova plugin add org.apache.cordova.geolocation
sudo npm install
sudo npm install -g bower
bower install
//build this and view at localhost:8000
gulp
Get the simulator running on ios or android
gulp build
phonegap run ios
//you’ll need the android sdk...
phonegap run android
#3: Test it!
basic file structure
app
├── src
├── www
├── testing
│ ├── spec.js
│ ├── conf.js
- spec.js (where the testing happens.)
- conf.js (configuration file. we will generate this together on the next page)
Setup
npm install -g protractor (-g for global install)
webdriver-manager update (just to make sure we have the latest version)
In your terminal, enter:
gulp
In a new terminal(command + T), enter:
webdriver-manager start
In another new terminal, enter:
protractor testing/conf.js // this is the relative path to your conf.js file
// conf.js
exports.config = {
seleniumAddress: 'http://localhost:4444/wd/hub',
capabilities: {
'browserName': 'chrome'
},
specs: ['spec.js'],
jasmineNodeOpts: {
showColors: true
}
}
Standard
Configuration
More! More!
Export your results!
npm install jasmine-reporters
Different test suites!
suites: {
homepage: 'testings/home/*Spec.js',
login: 'testings/login/*Spec.js'
}
Multiple browsers!
{'browserName' : 'chrome'},
{'browserName' : 'firefox’}
Your Turn
Acceptance Test
Best Commute:
Show commutability at any location
● Get current location (done)
● Get commuting data for that location (done)
● Show distance to metro, bus, retail(?)
● Show commuting time
Try It!
1. Test if the map is displayed
2. Substitute in model.googleaddress for lat/long -- does
your test still pass?
3. Write a test for displaying a streetview, and then make
the test pass by writing the needed code.
Try It!
4. Extra: Move the google maps & streetview code into
factories just like forcast.com, make sure your tests still
pass.
5. Extra: Write a test and code to make sure the map
doesn’t stretch.
6. Go Full Stack: Hook up a reverse geocoder to go from
current location to an address tying the whole app
together.
Hands On:
Build your
own
//get the build done
yo mobileangularui
gulp build (this will compress your src folder files and build everything in to the www/ folder)
phonegap run ios (this will open the ios simulator to display your app)
* borrow image from: http://mobileangularui.com/blog/your-first-phonegap-app-with-mobile-angular-
ui/
#1: Generate an app
src
├── html
│ └── index.html
├── images
├── js
│ ├── app.js
│ ├── controllers
│ │ └── main_controller.js
│ ├── directives
│ └── services
├── less
│ ├── app.less
│ ├── mixins.less
│ ├── responsive.less
│ └── variables.less
└── templates
├── home.html
└── sidebar.html
t
#2: Get it running!
//gulp to test it at localhost:8000
gulp
// to deploy the application
gulp build
//get the simulator running on ios
phonegap run ios (it can be android as well)
// often needed when installing new libraries or downloading code:
sudo npm install
sudo npm install -g bower
bower install
#3: Test it!
basic file structure
app
├── src
├── www
├── testing
│ ├── spec.js
│ ├── conf.js
- spec.js (where the testing happens.)
- conf.js (configuration file. we will generate this together on the next page)
Setup
npm install -g protractor (-g for global install)
webdriver-manager update (just to make sure we have the latest version)
Google api
https://github.com/google/google-api-nodejs-client
Angular Google Maps
http://angular-ui.github.io/angular-google-maps/#!/
http://angular-ui.github.io/angular-google-maps/#!/demo
Mobile Angular UI
http://mobileangularui.com/blog/your-first-phonegap-app-with-mobile-angular-ui/
Protractor testing Related
http://ramonvictor.github.io/protractor/slides
http://angular.github.io/protractor/#/tutorial
Ionic framework, similiar to the ones we use
http://learn.ionicframework.com/formulas/Protractor/
Who are we?
Create is a real estate information system packed with property data, 3D maps,
and tools that empower instant investment decision making.
We gather and display data from public and private sectors to let the user
determine the potential of any given properties in any neighborhoods in the
district in map layers, 3d buildings, charts, table and other formats. Plus, we have
lots of really useful and pretty maps.
Check us out at create.io
Thanks for participating!
Say hi to us in the conference and on social media!
Email: laura@create.io boris@create.io
Twitter: @allenderlaura @borisboryakan
Good Karma:
UX Patterns and Unit Testing in Angular with Karma
Laura Ferguson and Boris Kan @ Create, inc, 2015
http://goo.gl/hurhTR

More Related Content

What's hot

Unit Testing Express Middleware
Unit Testing Express MiddlewareUnit Testing Express Middleware
Unit Testing Express MiddlewareMorris Singer
 
Testing JavaScript Applications
Testing JavaScript ApplicationsTesting JavaScript Applications
Testing JavaScript ApplicationsThe Rolling Scopes
 
Unit Testing JavaScript Applications
Unit Testing JavaScript ApplicationsUnit Testing JavaScript Applications
Unit Testing JavaScript ApplicationsYnon Perek
 
Intro to testing Javascript with jasmine
Intro to testing Javascript with jasmineIntro to testing Javascript with jasmine
Intro to testing Javascript with jasmineTimothy Oxley
 
Unit Testing Express and Koa Middleware in ES2015
Unit Testing Express and Koa Middleware in ES2015Unit Testing Express and Koa Middleware in ES2015
Unit Testing Express and Koa Middleware in ES2015Morris Singer
 
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
 
SilverStripe CMS JavaScript Refactoring
SilverStripe CMS JavaScript RefactoringSilverStripe CMS JavaScript Refactoring
SilverStripe CMS JavaScript RefactoringIngo Schommer
 
JavaScript TDD with Jasmine and Karma
JavaScript TDD with Jasmine and KarmaJavaScript TDD with Jasmine and Karma
JavaScript TDD with Jasmine and KarmaChristopher Bartling
 
Testing Ember Apps: Managing Dependency
Testing Ember Apps: Managing DependencyTesting Ember Apps: Managing Dependency
Testing Ember Apps: Managing DependencyMatthew Beale
 
Test-Driven Development of AngularJS Applications
Test-Driven Development of AngularJS ApplicationsTest-Driven Development of AngularJS Applications
Test-Driven Development of AngularJS ApplicationsFITC
 
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
 
AngularJS Unit Testing w/Karma and Jasmine
AngularJS Unit Testing w/Karma and JasmineAngularJS Unit Testing w/Karma and Jasmine
AngularJS Unit Testing w/Karma and Jasminefoxp2code
 
Automated Testing in EmberJS
Automated Testing in EmberJSAutomated Testing in EmberJS
Automated Testing in EmberJSBen Limmer
 
Ember testing internals with ember cli
Ember testing internals with ember cliEmber testing internals with ember cli
Ember testing internals with ember cliCory Forsyth
 
node.js practical guide to serverside javascript
node.js practical guide to serverside javascriptnode.js practical guide to serverside javascript
node.js practical guide to serverside javascriptEldar Djafarov
 
Painless JavaScript Testing with Jest
Painless JavaScript Testing with JestPainless JavaScript Testing with Jest
Painless JavaScript Testing with JestMichał Pierzchała
 
Unit testing in JavaScript with Jasmine and Karma
Unit testing in JavaScript with Jasmine and KarmaUnit testing in JavaScript with Jasmine and Karma
Unit testing in JavaScript with Jasmine and KarmaAndrey Kolodnitsky
 
Testing JS with Jasmine
Testing JS with JasmineTesting JS with Jasmine
Testing JS with JasmineEvgeny Gurin
 
Getting to Grips with SilverStripe Testing
Getting to Grips with SilverStripe TestingGetting to Grips with SilverStripe Testing
Getting to Grips with SilverStripe TestingMark Rickerby
 

What's hot (20)

Unit Testing Express Middleware
Unit Testing Express MiddlewareUnit Testing Express Middleware
Unit Testing Express Middleware
 
Testing JavaScript Applications
Testing JavaScript ApplicationsTesting JavaScript Applications
Testing JavaScript Applications
 
Unit Testing JavaScript Applications
Unit Testing JavaScript ApplicationsUnit Testing JavaScript Applications
Unit Testing JavaScript Applications
 
Intro to testing Javascript with jasmine
Intro to testing Javascript with jasmineIntro to testing Javascript with jasmine
Intro to testing Javascript with jasmine
 
Unit Testing Express and Koa Middleware in ES2015
Unit Testing Express and Koa Middleware in ES2015Unit Testing Express and Koa Middleware in ES2015
Unit Testing Express and Koa Middleware in ES2015
 
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
 
SilverStripe CMS JavaScript Refactoring
SilverStripe CMS JavaScript RefactoringSilverStripe CMS JavaScript Refactoring
SilverStripe CMS JavaScript Refactoring
 
Full Stack Unit Testing
Full Stack Unit TestingFull Stack Unit Testing
Full Stack Unit Testing
 
JavaScript TDD with Jasmine and Karma
JavaScript TDD with Jasmine and KarmaJavaScript TDD with Jasmine and Karma
JavaScript TDD with Jasmine and Karma
 
Testing Ember Apps: Managing Dependency
Testing Ember Apps: Managing DependencyTesting Ember Apps: Managing Dependency
Testing Ember Apps: Managing Dependency
 
Test-Driven Development of AngularJS Applications
Test-Driven Development of AngularJS ApplicationsTest-Driven Development of AngularJS Applications
Test-Driven Development of AngularJS Applications
 
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
 
AngularJS Unit Testing w/Karma and Jasmine
AngularJS Unit Testing w/Karma and JasmineAngularJS Unit Testing w/Karma and Jasmine
AngularJS Unit Testing w/Karma and Jasmine
 
Automated Testing in EmberJS
Automated Testing in EmberJSAutomated Testing in EmberJS
Automated Testing in EmberJS
 
Ember testing internals with ember cli
Ember testing internals with ember cliEmber testing internals with ember cli
Ember testing internals with ember cli
 
node.js practical guide to serverside javascript
node.js practical guide to serverside javascriptnode.js practical guide to serverside javascript
node.js practical guide to serverside javascript
 
Painless JavaScript Testing with Jest
Painless JavaScript Testing with JestPainless JavaScript Testing with Jest
Painless JavaScript Testing with Jest
 
Unit testing in JavaScript with Jasmine and Karma
Unit testing in JavaScript with Jasmine and KarmaUnit testing in JavaScript with Jasmine and Karma
Unit testing in JavaScript with Jasmine and Karma
 
Testing JS with Jasmine
Testing JS with JasmineTesting JS with Jasmine
Testing JS with Jasmine
 
Getting to Grips with SilverStripe Testing
Getting to Grips with SilverStripe TestingGetting to Grips with SilverStripe Testing
Getting to Grips with SilverStripe Testing
 

Viewers also liked

ユニットテストを意識して安心しよう
ユニットテストを意識して安心しようユニットテストを意識して安心しよう
ユニットテストを意識して安心しようYuta Matsumura
 
UXを向上させる サイト高速化テクニック
UXを向上させる サイト高速化テクニックUXを向上させる サイト高速化テクニック
UXを向上させる サイト高速化テクニックShohei Tai
 
ユニットテストの保守性を作りこむ, xpjugkansai2011
ユニットテストの保守性を作りこむ, xpjugkansai2011ユニットテストの保守性を作りこむ, xpjugkansai2011
ユニットテストの保守性を作りこむ, xpjugkansai2011H Iseri
 
それでも僕はユニットテストを書きたい - Pester powered by PowerShell
それでも僕はユニットテストを書きたい - Pester powered by PowerShellそれでも僕はユニットテストを書きたい - Pester powered by PowerShell
それでも僕はユニットテストを書きたい - Pester powered by PowerShellHidari Ikw
 
SeleniumE2Eテストフレームワークを使用したテスト自動化事例 #Seleniumjp
SeleniumE2Eテストフレームワークを使用したテスト自動化事例 #SeleniumjpSeleniumE2Eテストフレームワークを使用したテスト自動化事例 #Seleniumjp
SeleniumE2Eテストフレームワークを使用したテスト自動化事例 #SeleniumjpYahoo!デベロッパーネットワーク
 
『健全なフロントエンド開発をしよう 〜Railsに乗っかるという選択編〜』 アップ用
『健全なフロントエンド開発をしよう 〜Railsに乗っかるという選択編〜』 アップ用『健全なフロントエンド開発をしよう 〜Railsに乗っかるという選択編〜』 アップ用
『健全なフロントエンド開発をしよう 〜Railsに乗っかるという選択編〜』 アップ用kotaro_hirayama
 
【システムテスト自動化カンファレンス2015】 楽天の品質改善を加速する継続的システムテストパターン #stac2015
【システムテスト自動化カンファレンス2015】 楽天の品質改善を加速する継続的システムテストパターン #stac2015【システムテスト自動化カンファレンス2015】 楽天の品質改善を加速する継続的システムテストパターン #stac2015
【システムテスト自動化カンファレンス2015】 楽天の品質改善を加速する継続的システムテストパターン #stac2015Kotaro Ogino
 
テスコン優勝事例におけるテスト分析公開用
テスコン優勝事例におけるテスト分析公開用テスコン優勝事例におけるテスト分析公開用
テスコン優勝事例におけるテスト分析公開用Tetsuya Kouno
 
kintoneフロントエンド開発 モダン化への道
kintoneフロントエンド開発 モダン化への道kintoneフロントエンド開発 モダン化への道
kintoneフロントエンド開発 モダン化への道Yusuke Amano
 
テストコード入門
テストコード入門テストコード入門
テストコード入門小川 昌吾
 

Viewers also liked (13)

ユニットテストを意識して安心しよう
ユニットテストを意識して安心しようユニットテストを意識して安心しよう
ユニットテストを意識して安心しよう
 
Angular Testing
Angular TestingAngular Testing
Angular Testing
 
UXを向上させる サイト高速化テクニック
UXを向上させる サイト高速化テクニックUXを向上させる サイト高速化テクニック
UXを向上させる サイト高速化テクニック
 
ユニットテストの保守性を作りこむ, xpjugkansai2011
ユニットテストの保守性を作りこむ, xpjugkansai2011ユニットテストの保守性を作りこむ, xpjugkansai2011
ユニットテストの保守性を作りこむ, xpjugkansai2011
 
それでも僕はユニットテストを書きたい - Pester powered by PowerShell
それでも僕はユニットテストを書きたい - Pester powered by PowerShellそれでも僕はユニットテストを書きたい - Pester powered by PowerShell
それでも僕はユニットテストを書きたい - Pester powered by PowerShell
 
Reactでユニットテスト #scripty05
Reactでユニットテスト #scripty05Reactでユニットテスト #scripty05
Reactでユニットテスト #scripty05
 
SeleniumE2Eテストフレームワークを使用したテスト自動化事例 #Seleniumjp
SeleniumE2Eテストフレームワークを使用したテスト自動化事例 #SeleniumjpSeleniumE2Eテストフレームワークを使用したテスト自動化事例 #Seleniumjp
SeleniumE2Eテストフレームワークを使用したテスト自動化事例 #Seleniumjp
 
Androidテスティング実践2 システムテスト編
Androidテスティング実践2 システムテスト編Androidテスティング実践2 システムテスト編
Androidテスティング実践2 システムテスト編
 
『健全なフロントエンド開発をしよう 〜Railsに乗っかるという選択編〜』 アップ用
『健全なフロントエンド開発をしよう 〜Railsに乗っかるという選択編〜』 アップ用『健全なフロントエンド開発をしよう 〜Railsに乗っかるという選択編〜』 アップ用
『健全なフロントエンド開発をしよう 〜Railsに乗っかるという選択編〜』 アップ用
 
【システムテスト自動化カンファレンス2015】 楽天の品質改善を加速する継続的システムテストパターン #stac2015
【システムテスト自動化カンファレンス2015】 楽天の品質改善を加速する継続的システムテストパターン #stac2015【システムテスト自動化カンファレンス2015】 楽天の品質改善を加速する継続的システムテストパターン #stac2015
【システムテスト自動化カンファレンス2015】 楽天の品質改善を加速する継続的システムテストパターン #stac2015
 
テスコン優勝事例におけるテスト分析公開用
テスコン優勝事例におけるテスト分析公開用テスコン優勝事例におけるテスト分析公開用
テスコン優勝事例におけるテスト分析公開用
 
kintoneフロントエンド開発 モダン化への道
kintoneフロントエンド開発 モダン化への道kintoneフロントエンド開発 モダン化への道
kintoneフロントエンド開発 モダン化への道
 
テストコード入門
テストコード入門テストコード入門
テストコード入門
 

Similar to Angular Testing with Karma & Protractor

Ultimate Introduction To AngularJS
Ultimate Introduction To AngularJSUltimate Introduction To AngularJS
Ultimate Introduction To AngularJSJacopo Nardiello
 
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
 
Reliable Javascript
Reliable Javascript Reliable Javascript
Reliable Javascript Glenn Stovall
 
Bonnes pratiques de développement avec Node js
Bonnes pratiques de développement avec Node jsBonnes pratiques de développement avec Node js
Bonnes pratiques de développement avec Node jsFrancois Zaninotto
 
The Peanut Butter Cup of Web-dev: Plack and single page web apps
The Peanut Butter Cup of Web-dev: Plack and single page web appsThe Peanut Butter Cup of Web-dev: Plack and single page web apps
The Peanut Butter Cup of Web-dev: Plack and single page web appsJohn Anderson
 
HTML5 for the Silverlight Guy
HTML5 for the Silverlight GuyHTML5 for the Silverlight Guy
HTML5 for the Silverlight GuyDavid Padbury
 
AngularJS Mobile Warsaw 20-10-2014
AngularJS Mobile Warsaw 20-10-2014AngularJS Mobile Warsaw 20-10-2014
AngularJS Mobile Warsaw 20-10-2014Dariusz Kalbarczyk
 
Writing robust Node.js applications
Writing robust Node.js applicationsWriting robust Node.js applications
Writing robust Node.js applicationsTom Croucher
 
MEAN - Notes from the field (Full-Stack Development with Javascript)
MEAN - Notes from the field (Full-Stack Development with Javascript)MEAN - Notes from the field (Full-Stack Development with Javascript)
MEAN - Notes from the field (Full-Stack Development with Javascript)Chris Clarke
 
Single Page Web Applications with CoffeeScript, Backbone and Jasmine
Single Page Web Applications with CoffeeScript, Backbone and JasmineSingle Page Web Applications with CoffeeScript, Backbone and Jasmine
Single Page Web Applications with CoffeeScript, Backbone and JasminePaulo Ragonha
 
Choosing a Javascript Framework
Choosing a Javascript FrameworkChoosing a Javascript Framework
Choosing a Javascript FrameworkAll Things Open
 
Adding a modern twist to legacy web applications
Adding a modern twist to legacy web applicationsAdding a modern twist to legacy web applications
Adding a modern twist to legacy web applicationsJeff Durta
 
Ember.js - A JavaScript framework for creating ambitious web applications
Ember.js - A JavaScript framework for creating ambitious web applications  Ember.js - A JavaScript framework for creating ambitious web applications
Ember.js - A JavaScript framework for creating ambitious web applications Juliana Lucena
 
SproutCore and the Future of Web Apps
SproutCore and the Future of Web AppsSproutCore and the Future of Web Apps
SproutCore and the Future of Web AppsMike Subelsky
 
Practical AngularJS
Practical AngularJSPractical AngularJS
Practical AngularJSWei Ru
 
Automated acceptance test
Automated acceptance testAutomated acceptance test
Automated acceptance testBryan Liu
 

Similar to Angular Testing with Karma & Protractor (20)

Ultimate Introduction To AngularJS
Ultimate Introduction To AngularJSUltimate Introduction To AngularJS
Ultimate Introduction To AngularJS
 
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)
 
Reliable Javascript
Reliable Javascript Reliable Javascript
Reliable Javascript
 
Bonnes pratiques de développement avec Node js
Bonnes pratiques de développement avec Node jsBonnes pratiques de développement avec Node js
Bonnes pratiques de développement avec Node js
 
The Peanut Butter Cup of Web-dev: Plack and single page web apps
The Peanut Butter Cup of Web-dev: Plack and single page web appsThe Peanut Butter Cup of Web-dev: Plack and single page web apps
The Peanut Butter Cup of Web-dev: Plack and single page web apps
 
HTML5 for the Silverlight Guy
HTML5 for the Silverlight GuyHTML5 for the Silverlight Guy
HTML5 for the Silverlight Guy
 
AngularJs Crash Course
AngularJs Crash CourseAngularJs Crash Course
AngularJs Crash Course
 
Intro to AngularJs
Intro to AngularJsIntro to AngularJs
Intro to AngularJs
 
AngularJS Mobile Warsaw 20-10-2014
AngularJS Mobile Warsaw 20-10-2014AngularJS Mobile Warsaw 20-10-2014
AngularJS Mobile Warsaw 20-10-2014
 
Writing robust Node.js applications
Writing robust Node.js applicationsWriting robust Node.js applications
Writing robust Node.js applications
 
MEAN - Notes from the field (Full-Stack Development with Javascript)
MEAN - Notes from the field (Full-Stack Development with Javascript)MEAN - Notes from the field (Full-Stack Development with Javascript)
MEAN - Notes from the field (Full-Stack Development with Javascript)
 
Single Page Web Applications with CoffeeScript, Backbone and Jasmine
Single Page Web Applications with CoffeeScript, Backbone and JasmineSingle Page Web Applications with CoffeeScript, Backbone and Jasmine
Single Page Web Applications with CoffeeScript, Backbone and Jasmine
 
Choosing a Javascript Framework
Choosing a Javascript FrameworkChoosing a Javascript Framework
Choosing a Javascript Framework
 
Adding a modern twist to legacy web applications
Adding a modern twist to legacy web applicationsAdding a modern twist to legacy web applications
Adding a modern twist to legacy web applications
 
Ember.js - A JavaScript framework for creating ambitious web applications
Ember.js - A JavaScript framework for creating ambitious web applications  Ember.js - A JavaScript framework for creating ambitious web applications
Ember.js - A JavaScript framework for creating ambitious web applications
 
SF Cordova Meetup
SF Cordova MeetupSF Cordova Meetup
SF Cordova Meetup
 
Basics of AngularJS
Basics of AngularJSBasics of AngularJS
Basics of AngularJS
 
SproutCore and the Future of Web Apps
SproutCore and the Future of Web AppsSproutCore and the Future of Web Apps
SproutCore and the Future of Web Apps
 
Practical AngularJS
Practical AngularJSPractical AngularJS
Practical AngularJS
 
Automated acceptance test
Automated acceptance testAutomated acceptance test
Automated acceptance test
 

More from ExoLeaders.com

Post MVP Strategies - Chris Clarke
Post MVP Strategies - Chris ClarkePost MVP Strategies - Chris Clarke
Post MVP Strategies - Chris ClarkeExoLeaders.com
 
Survival Tips for the Lone Product Manager - Kristin Bolton-Keys and Alicia D...
Survival Tips for the Lone Product Manager - Kristin Bolton-Keys and Alicia D...Survival Tips for the Lone Product Manager - Kristin Bolton-Keys and Alicia D...
Survival Tips for the Lone Product Manager - Kristin Bolton-Keys and Alicia D...ExoLeaders.com
 
Don't just do agile, do it right! - Simon Storm + Mary Lynn
Don't just do agile, do it right! - Simon Storm + Mary LynnDon't just do agile, do it right! - Simon Storm + Mary Lynn
Don't just do agile, do it right! - Simon Storm + Mary LynnExoLeaders.com
 
Building experimentation into your product lifecycle - Lauren Rabiano
Building experimentation into your product lifecycle - Lauren RabianoBuilding experimentation into your product lifecycle - Lauren Rabiano
Building experimentation into your product lifecycle - Lauren RabianoExoLeaders.com
 
Ego risk: Why Innovation Fails - Teague Hopkins
Ego risk: Why Innovation Fails - Teague HopkinsEgo risk: Why Innovation Fails - Teague Hopkins
Ego risk: Why Innovation Fails - Teague HopkinsExoLeaders.com
 
Buy-in: Getting to the yes - Deepak Thakral
Buy-in: Getting to the yes - Deepak ThakralBuy-in: Getting to the yes - Deepak Thakral
Buy-in: Getting to the yes - Deepak ThakralExoLeaders.com
 
Roadmapping workshop - Bruce McCarthy
Roadmapping workshop - Bruce McCarthyRoadmapping workshop - Bruce McCarthy
Roadmapping workshop - Bruce McCarthyExoLeaders.com
 
Is Agile Breaking Product Management - Steve Johnson
Is Agile Breaking Product Management - Steve JohnsonIs Agile Breaking Product Management - Steve Johnson
Is Agile Breaking Product Management - Steve JohnsonExoLeaders.com
 
Building trust with stakeholders - Jeff Lopez + Beth McHugh
Building trust with stakeholders - Jeff Lopez + Beth McHughBuilding trust with stakeholders - Jeff Lopez + Beth McHugh
Building trust with stakeholders - Jeff Lopez + Beth McHughExoLeaders.com
 
Designing and Building (Your Own) UI Frameworks For the Enterprise
Designing and Building (Your Own) UI Frameworks For the EnterpriseDesigning and Building (Your Own) UI Frameworks For the Enterprise
Designing and Building (Your Own) UI Frameworks For the EnterpriseExoLeaders.com
 
Our Global, Mobile UX Lessons From the 1.4 Billion People in China
Our Global, Mobile UX Lessons From the 1.4 Billion People in ChinaOur Global, Mobile UX Lessons From the 1.4 Billion People in China
Our Global, Mobile UX Lessons From the 1.4 Billion People in ChinaExoLeaders.com
 
Content-First Design Secrets
Content-First Design SecretsContent-First Design Secrets
Content-First Design SecretsExoLeaders.com
 
Creating Learning Organizations
Creating Learning OrganizationsCreating Learning Organizations
Creating Learning OrganizationsExoLeaders.com
 
ModevCon 2014 - Presentation Slides: Krishna Guda
ModevCon 2014 - Presentation Slides: Krishna GudaModevCon 2014 - Presentation Slides: Krishna Guda
ModevCon 2014 - Presentation Slides: Krishna GudaExoLeaders.com
 
ModevCon 2014 - Presentation Slides: Andy Glover
ModevCon 2014 - Presentation Slides: Andy GloverModevCon 2014 - Presentation Slides: Andy Glover
ModevCon 2014 - Presentation Slides: Andy GloverExoLeaders.com
 
ModevUX 2015 Sponsorship Prospectus (outdated version)
ModevUX 2015 Sponsorship Prospectus (outdated version)ModevUX 2015 Sponsorship Prospectus (outdated version)
ModevUX 2015 Sponsorship Prospectus (outdated version)ExoLeaders.com
 
Modev Wearables+Things Conference - Sponsor Prospectus
Modev Wearables+Things Conference - Sponsor ProspectusModev Wearables+Things Conference - Sponsor Prospectus
Modev Wearables+Things Conference - Sponsor ProspectusExoLeaders.com
 

More from ExoLeaders.com (18)

Post MVP Strategies - Chris Clarke
Post MVP Strategies - Chris ClarkePost MVP Strategies - Chris Clarke
Post MVP Strategies - Chris Clarke
 
Survival Tips for the Lone Product Manager - Kristin Bolton-Keys and Alicia D...
Survival Tips for the Lone Product Manager - Kristin Bolton-Keys and Alicia D...Survival Tips for the Lone Product Manager - Kristin Bolton-Keys and Alicia D...
Survival Tips for the Lone Product Manager - Kristin Bolton-Keys and Alicia D...
 
Don't just do agile, do it right! - Simon Storm + Mary Lynn
Don't just do agile, do it right! - Simon Storm + Mary LynnDon't just do agile, do it right! - Simon Storm + Mary Lynn
Don't just do agile, do it right! - Simon Storm + Mary Lynn
 
Building experimentation into your product lifecycle - Lauren Rabiano
Building experimentation into your product lifecycle - Lauren RabianoBuilding experimentation into your product lifecycle - Lauren Rabiano
Building experimentation into your product lifecycle - Lauren Rabiano
 
Ego risk: Why Innovation Fails - Teague Hopkins
Ego risk: Why Innovation Fails - Teague HopkinsEgo risk: Why Innovation Fails - Teague Hopkins
Ego risk: Why Innovation Fails - Teague Hopkins
 
Buy-in: Getting to the yes - Deepak Thakral
Buy-in: Getting to the yes - Deepak ThakralBuy-in: Getting to the yes - Deepak Thakral
Buy-in: Getting to the yes - Deepak Thakral
 
Roadmapping workshop - Bruce McCarthy
Roadmapping workshop - Bruce McCarthyRoadmapping workshop - Bruce McCarthy
Roadmapping workshop - Bruce McCarthy
 
Is Agile Breaking Product Management - Steve Johnson
Is Agile Breaking Product Management - Steve JohnsonIs Agile Breaking Product Management - Steve Johnson
Is Agile Breaking Product Management - Steve Johnson
 
Building trust with stakeholders - Jeff Lopez + Beth McHugh
Building trust with stakeholders - Jeff Lopez + Beth McHughBuilding trust with stakeholders - Jeff Lopez + Beth McHugh
Building trust with stakeholders - Jeff Lopez + Beth McHugh
 
Designing and Building (Your Own) UI Frameworks For the Enterprise
Designing and Building (Your Own) UI Frameworks For the EnterpriseDesigning and Building (Your Own) UI Frameworks For the Enterprise
Designing and Building (Your Own) UI Frameworks For the Enterprise
 
Our Global, Mobile UX Lessons From the 1.4 Billion People in China
Our Global, Mobile UX Lessons From the 1.4 Billion People in ChinaOur Global, Mobile UX Lessons From the 1.4 Billion People in China
Our Global, Mobile UX Lessons From the 1.4 Billion People in China
 
Content-First Design Secrets
Content-First Design SecretsContent-First Design Secrets
Content-First Design Secrets
 
Creating Learning Organizations
Creating Learning OrganizationsCreating Learning Organizations
Creating Learning Organizations
 
How Designers Fail
How Designers FailHow Designers Fail
How Designers Fail
 
ModevCon 2014 - Presentation Slides: Krishna Guda
ModevCon 2014 - Presentation Slides: Krishna GudaModevCon 2014 - Presentation Slides: Krishna Guda
ModevCon 2014 - Presentation Slides: Krishna Guda
 
ModevCon 2014 - Presentation Slides: Andy Glover
ModevCon 2014 - Presentation Slides: Andy GloverModevCon 2014 - Presentation Slides: Andy Glover
ModevCon 2014 - Presentation Slides: Andy Glover
 
ModevUX 2015 Sponsorship Prospectus (outdated version)
ModevUX 2015 Sponsorship Prospectus (outdated version)ModevUX 2015 Sponsorship Prospectus (outdated version)
ModevUX 2015 Sponsorship Prospectus (outdated version)
 
Modev Wearables+Things Conference - Sponsor Prospectus
Modev Wearables+Things Conference - Sponsor ProspectusModev Wearables+Things Conference - Sponsor Prospectus
Modev Wearables+Things Conference - Sponsor Prospectus
 

Recently uploaded

VIP Call Girls Bhiwandi Ananya 8250192130 Independent Escort Service Bhiwandi
VIP Call Girls Bhiwandi Ananya 8250192130 Independent Escort Service BhiwandiVIP Call Girls Bhiwandi Ananya 8250192130 Independent Escort Service Bhiwandi
VIP Call Girls Bhiwandi Ananya 8250192130 Independent Escort Service BhiwandiSuhani Kapoor
 
The_Canvas_of_Creative_Mastery_Newsletter_April_2024_Version.pdf
The_Canvas_of_Creative_Mastery_Newsletter_April_2024_Version.pdfThe_Canvas_of_Creative_Mastery_Newsletter_April_2024_Version.pdf
The_Canvas_of_Creative_Mastery_Newsletter_April_2024_Version.pdfAmirYakdi
 
VVIP Pune Call Girls Hadapsar (7001035870) Pune Escorts Nearby with Complete ...
VVIP Pune Call Girls Hadapsar (7001035870) Pune Escorts Nearby with Complete ...VVIP Pune Call Girls Hadapsar (7001035870) Pune Escorts Nearby with Complete ...
VVIP Pune Call Girls Hadapsar (7001035870) Pune Escorts Nearby with Complete ...Call Girls in Nagpur High Profile
 
VIP Russian Call Girls in Saharanpur Deepika 8250192130 Independent Escort Se...
VIP Russian Call Girls in Saharanpur Deepika 8250192130 Independent Escort Se...VIP Russian Call Girls in Saharanpur Deepika 8250192130 Independent Escort Se...
VIP Russian Call Girls in Saharanpur Deepika 8250192130 Independent Escort Se...Suhani Kapoor
 
DragonBall PowerPoint Template for demo.pptx
DragonBall PowerPoint Template for demo.pptxDragonBall PowerPoint Template for demo.pptx
DragonBall PowerPoint Template for demo.pptxmirandajeremy200221
 
CALL ON ➥8923113531 🔝Call Girls Aminabad Lucknow best Night Fun service
CALL ON ➥8923113531 🔝Call Girls Aminabad Lucknow best Night Fun serviceCALL ON ➥8923113531 🔝Call Girls Aminabad Lucknow best Night Fun service
CALL ON ➥8923113531 🔝Call Girls Aminabad Lucknow best Night Fun serviceanilsa9823
 
Call Girls in Okhla Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Okhla Delhi 💯Call Us 🔝8264348440🔝Call Girls in Okhla Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Okhla Delhi 💯Call Us 🔝8264348440🔝soniya singh
 
Abu Dhabi Call Girls O58993O4O2 Call Girls in Abu Dhabi`
Abu Dhabi Call Girls O58993O4O2 Call Girls in Abu Dhabi`Abu Dhabi Call Girls O58993O4O2 Call Girls in Abu Dhabi`
Abu Dhabi Call Girls O58993O4O2 Call Girls in Abu Dhabi`dajasot375
 
NO1 Trending kala jadu Love Marriage Black Magic Punjab Powerful Black Magic ...
NO1 Trending kala jadu Love Marriage Black Magic Punjab Powerful Black Magic ...NO1 Trending kala jadu Love Marriage Black Magic Punjab Powerful Black Magic ...
NO1 Trending kala jadu Love Marriage Black Magic Punjab Powerful Black Magic ...Amil baba
 
Best VIP Call Girls Noida Sector 44 Call Me: 8448380779
Best VIP Call Girls Noida Sector 44 Call Me: 8448380779Best VIP Call Girls Noida Sector 44 Call Me: 8448380779
Best VIP Call Girls Noida Sector 44 Call Me: 8448380779Delhi Call girls
 
Revit Understanding Reference Planes and Reference lines in Revit for Family ...
Revit Understanding Reference Planes and Reference lines in Revit for Family ...Revit Understanding Reference Planes and Reference lines in Revit for Family ...
Revit Understanding Reference Planes and Reference lines in Revit for Family ...Narsimha murthy
 
VIP Russian Call Girls in Gorakhpur Deepika 8250192130 Independent Escort Ser...
VIP Russian Call Girls in Gorakhpur Deepika 8250192130 Independent Escort Ser...VIP Russian Call Girls in Gorakhpur Deepika 8250192130 Independent Escort Ser...
VIP Russian Call Girls in Gorakhpur Deepika 8250192130 Independent Escort Ser...Suhani Kapoor
 
SCRIP Lua HTTP PROGRACMACION PLC WECON CA
SCRIP Lua HTTP PROGRACMACION PLC  WECON CASCRIP Lua HTTP PROGRACMACION PLC  WECON CA
SCRIP Lua HTTP PROGRACMACION PLC WECON CANestorGamez6
 
How to Be Famous in your Field just visit our Site
How to Be Famous in your Field just visit our SiteHow to Be Famous in your Field just visit our Site
How to Be Famous in your Field just visit our Sitegalleryaagency
 
VIP College Call Girls Gorakhpur Bhavna 8250192130 Independent Escort Service...
VIP College Call Girls Gorakhpur Bhavna 8250192130 Independent Escort Service...VIP College Call Girls Gorakhpur Bhavna 8250192130 Independent Escort Service...
VIP College Call Girls Gorakhpur Bhavna 8250192130 Independent Escort Service...Suhani Kapoor
 
Cheap Rate Call girls Malviya Nagar 9205541914 shot 1500 night
Cheap Rate Call girls Malviya Nagar 9205541914 shot 1500 nightCheap Rate Call girls Malviya Nagar 9205541914 shot 1500 night
Cheap Rate Call girls Malviya Nagar 9205541914 shot 1500 nightDelhi Call girls
 
Fashion trends before and after covid.pptx
Fashion trends before and after covid.pptxFashion trends before and after covid.pptx
Fashion trends before and after covid.pptxVanshNarang19
 
Dubai Call Girls Pro Domain O525547819 Call Girls Dubai Doux
Dubai Call Girls Pro Domain O525547819 Call Girls Dubai DouxDubai Call Girls Pro Domain O525547819 Call Girls Dubai Doux
Dubai Call Girls Pro Domain O525547819 Call Girls Dubai Douxkojalkojal131
 

Recently uploaded (20)

VIP Call Girls Bhiwandi Ananya 8250192130 Independent Escort Service Bhiwandi
VIP Call Girls Bhiwandi Ananya 8250192130 Independent Escort Service BhiwandiVIP Call Girls Bhiwandi Ananya 8250192130 Independent Escort Service Bhiwandi
VIP Call Girls Bhiwandi Ananya 8250192130 Independent Escort Service Bhiwandi
 
The_Canvas_of_Creative_Mastery_Newsletter_April_2024_Version.pdf
The_Canvas_of_Creative_Mastery_Newsletter_April_2024_Version.pdfThe_Canvas_of_Creative_Mastery_Newsletter_April_2024_Version.pdf
The_Canvas_of_Creative_Mastery_Newsletter_April_2024_Version.pdf
 
VVIP Pune Call Girls Hadapsar (7001035870) Pune Escorts Nearby with Complete ...
VVIP Pune Call Girls Hadapsar (7001035870) Pune Escorts Nearby with Complete ...VVIP Pune Call Girls Hadapsar (7001035870) Pune Escorts Nearby with Complete ...
VVIP Pune Call Girls Hadapsar (7001035870) Pune Escorts Nearby with Complete ...
 
VIP Russian Call Girls in Saharanpur Deepika 8250192130 Independent Escort Se...
VIP Russian Call Girls in Saharanpur Deepika 8250192130 Independent Escort Se...VIP Russian Call Girls in Saharanpur Deepika 8250192130 Independent Escort Se...
VIP Russian Call Girls in Saharanpur Deepika 8250192130 Independent Escort Se...
 
DragonBall PowerPoint Template for demo.pptx
DragonBall PowerPoint Template for demo.pptxDragonBall PowerPoint Template for demo.pptx
DragonBall PowerPoint Template for demo.pptx
 
CALL ON ➥8923113531 🔝Call Girls Aminabad Lucknow best Night Fun service
CALL ON ➥8923113531 🔝Call Girls Aminabad Lucknow best Night Fun serviceCALL ON ➥8923113531 🔝Call Girls Aminabad Lucknow best Night Fun service
CALL ON ➥8923113531 🔝Call Girls Aminabad Lucknow best Night Fun service
 
Call Girls in Okhla Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Okhla Delhi 💯Call Us 🔝8264348440🔝Call Girls in Okhla Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Okhla Delhi 💯Call Us 🔝8264348440🔝
 
Abu Dhabi Call Girls O58993O4O2 Call Girls in Abu Dhabi`
Abu Dhabi Call Girls O58993O4O2 Call Girls in Abu Dhabi`Abu Dhabi Call Girls O58993O4O2 Call Girls in Abu Dhabi`
Abu Dhabi Call Girls O58993O4O2 Call Girls in Abu Dhabi`
 
NO1 Trending kala jadu Love Marriage Black Magic Punjab Powerful Black Magic ...
NO1 Trending kala jadu Love Marriage Black Magic Punjab Powerful Black Magic ...NO1 Trending kala jadu Love Marriage Black Magic Punjab Powerful Black Magic ...
NO1 Trending kala jadu Love Marriage Black Magic Punjab Powerful Black Magic ...
 
Best VIP Call Girls Noida Sector 44 Call Me: 8448380779
Best VIP Call Girls Noida Sector 44 Call Me: 8448380779Best VIP Call Girls Noida Sector 44 Call Me: 8448380779
Best VIP Call Girls Noida Sector 44 Call Me: 8448380779
 
escort service sasti (*~Call Girls in Prasad Nagar Metro❤️9953056974
escort service sasti (*~Call Girls in Prasad Nagar Metro❤️9953056974escort service sasti (*~Call Girls in Prasad Nagar Metro❤️9953056974
escort service sasti (*~Call Girls in Prasad Nagar Metro❤️9953056974
 
Revit Understanding Reference Planes and Reference lines in Revit for Family ...
Revit Understanding Reference Planes and Reference lines in Revit for Family ...Revit Understanding Reference Planes and Reference lines in Revit for Family ...
Revit Understanding Reference Planes and Reference lines in Revit for Family ...
 
VIP Russian Call Girls in Gorakhpur Deepika 8250192130 Independent Escort Ser...
VIP Russian Call Girls in Gorakhpur Deepika 8250192130 Independent Escort Ser...VIP Russian Call Girls in Gorakhpur Deepika 8250192130 Independent Escort Ser...
VIP Russian Call Girls in Gorakhpur Deepika 8250192130 Independent Escort Ser...
 
SCRIP Lua HTTP PROGRACMACION PLC WECON CA
SCRIP Lua HTTP PROGRACMACION PLC  WECON CASCRIP Lua HTTP PROGRACMACION PLC  WECON CA
SCRIP Lua HTTP PROGRACMACION PLC WECON CA
 
How to Be Famous in your Field just visit our Site
How to Be Famous in your Field just visit our SiteHow to Be Famous in your Field just visit our Site
How to Be Famous in your Field just visit our Site
 
VIP College Call Girls Gorakhpur Bhavna 8250192130 Independent Escort Service...
VIP College Call Girls Gorakhpur Bhavna 8250192130 Independent Escort Service...VIP College Call Girls Gorakhpur Bhavna 8250192130 Independent Escort Service...
VIP College Call Girls Gorakhpur Bhavna 8250192130 Independent Escort Service...
 
young call girls in Pandav nagar 🔝 9953056974 🔝 Delhi escort Service
young call girls in Pandav nagar 🔝 9953056974 🔝 Delhi escort Serviceyoung call girls in Pandav nagar 🔝 9953056974 🔝 Delhi escort Service
young call girls in Pandav nagar 🔝 9953056974 🔝 Delhi escort Service
 
Cheap Rate Call girls Malviya Nagar 9205541914 shot 1500 night
Cheap Rate Call girls Malviya Nagar 9205541914 shot 1500 nightCheap Rate Call girls Malviya Nagar 9205541914 shot 1500 night
Cheap Rate Call girls Malviya Nagar 9205541914 shot 1500 night
 
Fashion trends before and after covid.pptx
Fashion trends before and after covid.pptxFashion trends before and after covid.pptx
Fashion trends before and after covid.pptx
 
Dubai Call Girls Pro Domain O525547819 Call Girls Dubai Doux
Dubai Call Girls Pro Domain O525547819 Call Girls Dubai DouxDubai Call Girls Pro Domain O525547819 Call Girls Dubai Doux
Dubai Call Girls Pro Domain O525547819 Call Girls Dubai Doux
 

Angular Testing with Karma & Protractor

  • 1. Good Karma: UX Patterns and Unit Testing in Angular with Karma Laura Ferguson and Boris Kan @ Create, inc, 2015 http://goo.gl/hurhTR
  • 3. Why AngularJS? ● Open Source Web Application Framework ● Maintained by Google & individual developers ● Addresses challenges encountered in developing single- page apps ● Embraces Model-View-Controller → Now called MVW ● Provides rich internet components ● Mobile(ish) friendly & responsive http://en.wikipedia.org/wiki/AngularJS http://goo.gl/hurhTR
  • 4. By Ben Nadel www.bennadel.com
  • 5. Bind an element to items in a list, one at a time: <ul> <li ng-repeat="boat in boats"> <span>{{boat.name}}</span> </li> </ul> *While doable, try not to use ids and classes UI Patterns in Angular: Bind an element to a variable in the controller: <span ng-bind="mobileApp"></span> or <span>{{mobileApp}}</span> Bind an element by ng-click <button ng-click="next()"></button>
  • 6. What is scope? And what is $scope? In Computer Science (cs) a scope may contains a set of variables that may have a specific value when a function is called. In angular, $scope is the model that contains the values displayed by the view and controlled by the controller. ex: $scope.model.address = “123 45th St NW DC 20012”; https://docs.angularjs.org/guide/scope
  • 7. What is a controller? Think of a controller as the wizard (as in the wizard of oz) deciding what should happen after the view (the gui/the html) reports a user interaction back to the controller. Let’s take a closer look...
  • 8. For Example: .controller('MainController', ['$scope', '$document', '$window', '$rootScope', 'deviceReady', 'getCurrentPosition', 'getWeather', function ($scope, $document, $window, $rootScope, deviceReady, getCurrentPosition, getWeather) { $scope.model = { "address": "555 Pennsylvania Ave NW, Washington, DC 20001", "latitude": 0, "longitude": 0, "walkAddress": "", "googleAddress": "", "currentPosition": "", "location":"", "weather":"", "markers":"" }; $scope.changeText = function () { var textElement = document.getElementById("householdIncome"); textElement.innerHTML = 'I am a changed div!'; console.log(textElement.innerHTML); };
  • 9. Now let’s make something happen $scope.walkAddressLookup = function () { if ($scope.model.address) { var address = $scope.model.address; address = address.replace(',', ''); //for walkscore return address.split(' ').join('-'); } };
  • 10. $scope.loadAddresses = function () { getCurrentPosition(function (position) { $scope.model.currentPosition = position; $scope.model.latitude = position.coords.latitude; $scope.model.longitude = position.coords.longitude; getWeather( position.coords.latitude, position.coords.longitude, function(location, weather){ $scope.model.location = location; $scope.model.weather = weather; }); }); if ($scope.model.address) { //for walkscore $scope.model.walkAddress = $scope.walkAddressLookup(); } };
  • 11. Testing Isn’t that a backend thing?
  • 12. Types of testing Unit Testing -- Developer writes small automated tests for each unit of functionality Quality Assurance testing (Each developer) Integration Testing & E2E -- All components work together as expected (Lead Developer / UX) Quality Assurance Testing -- Systematic objective testing of a working release following a thorough test plan. Load Testing -- Automated testing of system with simulated users and/or simulated traffic. Acceptance (Success) Testing -- A knowledgeable user can use the system to complete the intended tasks Alpha Testing -- Typical users are given the opportunity to use the system, observed while doing so, and issues are noted and fixed by an objective observer (QA) Beta Testing -- A small number of users are given complete access to the system and asked for feedback periodically.
  • 13. What is Test Driven Development? ● Very short cycles, write tiny tests, and test everything. ● Run a continuous integration server and maintain the integrity of your tests at all time. ● Keeps your code base fully functional. http://en.wikipedia.org/wiki/Test-driven_development
  • 14. Why front-end e2e testing? Practical reasons ● Get notified when backend changes break the gui ● Get notified when “simple” front- end changes break usability ● Get notified when your app doesn’t work right on some browsers (and hopefully sometime soon on devices) Or just for better “Cred” ● Validation is a good practice. ● Earn some ’spect from backend developers (’sup) ● Think big and think ahead.
  • 15. For Example: it('should have be able to find the title', function() { var docs = element(by.css('.navbar-brand-center')); expect(docs.getText()).toContain('Good Karma Commutability'); });
  • 16. Acceptance Tests Best Commute: Show commutability at any location ● Get current location ● Get commuting data for that location ● Show distance to metro, bus, retail(?) ● Show commuting time
  • 17. What’s Next 1) Write a basic test that fails because no the code doesn’t exist yet. 2) Then make the test pass by writing the code. 3) Rinse / Repeat (with new tests)
  • 18. // spec.js describe('Protractor Demo App', function() { it('should have a title', function() { browser.get('http://localhost:8000'); expect(browser.getTitle()).toEqual('Property Lookup'); }); } Write an E2E Test Acceptance Test: The app should display a title
  • 19. Pass or Fail? Acceptance Test: user can edit text field in your spec.js it('should be able to edit the text field', function() { var textArea = element(by.model('areaText')); textArea.sendKeys("Hi", protractor.Key.ENTER); expect(textArea.getAttribute('value')).toContain('Hi!'); }); In your html application <textarea ng-model="'areaText'" readonly><textarea>
  • 20. It failed! (let’s drown our sorrow with a beer!!!)
  • 21. the Corrected Code would be: In your html application <textarea ng-model="'areaText'"><textarea>
  • 22. Pass or Fail? Acceptance Test: user can edit text field in your spec.js it('should be able to edit the text field', function() { var textArea = element(by.model('areaText')); textArea.sendKeys("Hi", protractor.Key.ENTER); expect(textArea.getAttribute('value')).toContain('Hi!'); }); In your html application <textarea ng-model="'areaText'"><textarea>
  • 23. It passed! (let’s celebrate this with a beer!!!) sip sip sip. Now, on to the next one!
  • 24. Bind an element to items in a list, one at a time: element( by.repeater(boat in boats' ).row(0).column('name') ); <ul> <li ng-repeat="boat in boats"> <span>{{boat.name}}</span> </li> </ul> *While doable, try not to use ids and classes Capturing UI Patterns in Angular in Tests: Bind an element to a variable in the controller: element( by.binding('mobileApp') ); <span ng-bind="mobileApp"></span> or <span>{{mobileApp}}</span> Bind an element by ng-click element.all( by.css('ng-click="issue()"]') ).click(); <button ng-click="next()"></button>
  • 26. #1: Build it with Angular http://goo.gl/hurhTR //install the requirements -- get node curl -L https://npmjs.com/install.sh | sh sudo npm install -g bower yo gulp generator-mobileangularui sudo npm install -g phonegap sudo npm install -g ios-deploy sudo npm install -g ios-sim bower install --save font-awesome#4.2 //create folders and directories mkdir mobilephonegap cd mobilephonegap http://mobileangularui.com/blog/your-first-phonegap-app-with-mobile-angular-ui/
  • 27. Try out the working code git clone https://github.com/CreateIO/propertyLookup.git git checkout -b example git pull origin example cordova plugin add org.apache.cordova.geolocation sudo npm install sudo npm install -g bower bower install //build this and view at localhost:8000 gulp
  • 28. Get the simulator running on ios or android gulp build phonegap run ios //you’ll need the android sdk... phonegap run android
  • 29. #3: Test it! basic file structure app ├── src ├── www ├── testing │ ├── spec.js │ ├── conf.js - spec.js (where the testing happens.) - conf.js (configuration file. we will generate this together on the next page) Setup npm install -g protractor (-g for global install) webdriver-manager update (just to make sure we have the latest version)
  • 30. In your terminal, enter: gulp In a new terminal(command + T), enter: webdriver-manager start In another new terminal, enter: protractor testing/conf.js // this is the relative path to your conf.js file
  • 31. // conf.js exports.config = { seleniumAddress: 'http://localhost:4444/wd/hub', capabilities: { 'browserName': 'chrome' }, specs: ['spec.js'], jasmineNodeOpts: { showColors: true } } Standard Configuration
  • 32. More! More! Export your results! npm install jasmine-reporters Different test suites! suites: { homepage: 'testings/home/*Spec.js', login: 'testings/login/*Spec.js' } Multiple browsers! {'browserName' : 'chrome'}, {'browserName' : 'firefox’}
  • 34. Acceptance Test Best Commute: Show commutability at any location ● Get current location (done) ● Get commuting data for that location (done) ● Show distance to metro, bus, retail(?) ● Show commuting time
  • 35. Try It! 1. Test if the map is displayed 2. Substitute in model.googleaddress for lat/long -- does your test still pass? 3. Write a test for displaying a streetview, and then make the test pass by writing the needed code.
  • 36. Try It! 4. Extra: Move the google maps & streetview code into factories just like forcast.com, make sure your tests still pass. 5. Extra: Write a test and code to make sure the map doesn’t stretch. 6. Go Full Stack: Hook up a reverse geocoder to go from current location to an address tying the whole app together.
  • 38. //get the build done yo mobileangularui gulp build (this will compress your src folder files and build everything in to the www/ folder) phonegap run ios (this will open the ios simulator to display your app) * borrow image from: http://mobileangularui.com/blog/your-first-phonegap-app-with-mobile-angular- ui/ #1: Generate an app
  • 39. src ├── html │ └── index.html ├── images ├── js │ ├── app.js │ ├── controllers │ │ └── main_controller.js │ ├── directives │ └── services ├── less │ ├── app.less │ ├── mixins.less │ ├── responsive.less │ └── variables.less └── templates ├── home.html └── sidebar.html t
  • 40. #2: Get it running! //gulp to test it at localhost:8000 gulp // to deploy the application gulp build //get the simulator running on ios phonegap run ios (it can be android as well) // often needed when installing new libraries or downloading code: sudo npm install sudo npm install -g bower bower install
  • 41. #3: Test it! basic file structure app ├── src ├── www ├── testing │ ├── spec.js │ ├── conf.js - spec.js (where the testing happens.) - conf.js (configuration file. we will generate this together on the next page) Setup npm install -g protractor (-g for global install) webdriver-manager update (just to make sure we have the latest version)
  • 42. Google api https://github.com/google/google-api-nodejs-client Angular Google Maps http://angular-ui.github.io/angular-google-maps/#!/ http://angular-ui.github.io/angular-google-maps/#!/demo Mobile Angular UI http://mobileangularui.com/blog/your-first-phonegap-app-with-mobile-angular-ui/ Protractor testing Related http://ramonvictor.github.io/protractor/slides http://angular.github.io/protractor/#/tutorial Ionic framework, similiar to the ones we use http://learn.ionicframework.com/formulas/Protractor/
  • 43. Who are we? Create is a real estate information system packed with property data, 3D maps, and tools that empower instant investment decision making. We gather and display data from public and private sectors to let the user determine the potential of any given properties in any neighborhoods in the district in map layers, 3d buildings, charts, table and other formats. Plus, we have lots of really useful and pretty maps. Check us out at create.io
  • 44. Thanks for participating! Say hi to us in the conference and on social media! Email: laura@create.io boris@create.io Twitter: @allenderlaura @borisboryakan
  • 45. Good Karma: UX Patterns and Unit Testing in Angular with Karma Laura Ferguson and Boris Kan @ Create, inc, 2015 http://goo.gl/hurhTR