SlideShare a Scribd company logo
UNIT TESTING IN ANGULARJS
Dennis Jaamann — Frédéric Ghijselinck
—@dennisjaamann @f_ghijselinck
CC Front-end & UX
UNIT TESTING IN ANGULARJS
Unit testing JavaScript
Karma
Unit testing frameworks
QUnit
Mocha
Jasmine
Unit testing AngularJS
a. Controller
b. Service
c. Directive
Coverage reports
UNIT TESTING JAVASCRIPT
Testing JavaScript is hard
Mixed with HTML
Inline scripts
No real classes
No real modules
Feels like wrestling a king croc
UNIT TESTING JAVASCRIPT - PITFALLS
DOM interactions
AJAX
Event handlers
Timeouts / Intervals
Promises
Basically everything asynchronous
UNIT TESTING JAVASCRIPT - WHAT DO WE NEED?
Browser
Test Runner
Test framework
Assertions (matchers)
Ways to mock
...
KARMA
Karma = unit test runner (by angular core team)
configuration file
test suites
headless/real browser
Install karma
                    
npm install karma ­­save­dev
                
Automatically generate a config file
                    
karma init
                
KARMA
Config file
karma.conf.js
                    
module.exports = function(config) {
    config.set({
        basePath: '../..',
        frameworks: ['jasmine'],
        autoWatch : false,
        browsers : [ 'PhantomJS' ]
    });
};
                
Simply run the test suite
                    
karma start
                
PHANTOMJS
Headless browser
No GUI
Tests run faster
Only suited for unit tests, not integration tests
PHANTOMJS KARMA CONFIGURATION
Install PhantomJS launcher
         
npm install karma­phantomjs­launcher ­­save­dev
       
Enable PhantomJS plugin
         
plugins : ['karma­jasmine', 'karma­phantomjs­launcher']
       
Configure your browser
         
module.exports = function(config) {
    config.set({
        browsers : ['PhantomJS']
    });
};
       
UNIT TESTING FRAMEWORKS
Several options
Qunit
Mocha
Jasmine
All similar, choose your own flavor
Karma supports all
QUNIT
A minimal QUnit test setup:
                    
<html>
<head>
    <meta charset="utf­8">
    <title>QUnit Example</title>
    <link rel="stylesheet" href="//code.jquery.com/qunit/qunit­1.18.0.css">
</head>
<body>
    <div id="qunit"></div>
    <div id="qunit­fixture"></div>
    <script src="//code.jquery.com/qunit/qunit­1.18.0.js"></script>
    <script src="tests.js"></script>
</body>
</html>
                
QUNIT
The contents of tests.js
                    
QUnit.module( "group a" );
QUnit.test( "a basic test example", function( assert ) {
  assert.ok( true, "true succeeds" );
});
QUnit.test( "notOk test", function( assert ) {
  assert.notOk( false, "false succeeds" );
});
QUnit.module( "group b" );
QUnit.test( "hello test", function( assert ) {
    assert.ok( 1 == "1", "Passed!" );
});
                
MOCHA
An example test
                    
var assert = require("assert")
    describe('Array', function(){
        describe('#indexOf()', function(){
            it('should return ­1 when the value is not present', function(){
                assert.equal(­1, [1,2,3].indexOf(5));
                assert.equal(­1, [1,2,3].indexOf(0));
            })
    })
})
                
JASMINE
▪ test suite with specs:
                    
describe("A suite", function() {
    it("contains spec with an expectation", function() {
        expect(true).toBe(true);
    });
});
                
                    
describe("A suite is just a function", function() {
    var a;
    it("and so is a spec", function() {
        a = true;
        expect(a).toBe(true);
    });
});
                
JASMINE
setup & teardown
global functions:
beforeEach()
afterEach()
beforeAll()
afterAll()
JASMINE - MATCHERS
expect().toBe();
expect().toEqual();
expect().toMatch();
expect().toBeDefined();
expect().toBeUnDefined();
expect().toBeNull();
expect().toBeTruthy();
expect().toBeFalsy();
expect().toContain();
expect().toBeLessThan();
expect().toBeGreaterThan();
expect().toBeCloseTo();
expect().toThrow();
JASMINE - SPIES
                    
spyOn(foo, 'setBar');
                
                    
it("tracks that the spy was called", function() {
    expect(foo.setBar).toHaveBeenCalled();
});
                
and.callThrough
and.returnValue
and.callFake
and.throwError
and.stub
JASMINE - SPIES
                    
describe("A spy", function() {
    var foo, bar = null;
    beforeEach(function() {
        foo = {
            setBar: function(value) {
                bar = value;
            }
        };
        spyOn(foo, 'setBar');
        foo.setBar(123);
        foo.setBar(456, 'another param');
    });
    it("tracks that the spy was called", function() {
        expect(foo.setBar).toHaveBeenCalled();
    });
    it("tracks all the arguments of its calls", function() {
        expect(foo.setBar).toHaveBeenCalledWith(123);
        expect(foo.setBar).toHaveBeenCalledWith(456, 'another param');
    });
});
                
JASMINE - DISABLE
disabling suites with xdescribe
                    
xdescribe("A disabled suite", function() {
    it("with a spec", function() {
        expect(true).toBe(true);
    });
});
                
disabling specs with xit
                    
describe("A suite", function() {
    xit("with a disabled spec", function() {
        expect(true).toBe(true);
    });
});
                
JASMINE - EXCLUSIVE TESTS
run specific suites with ddescribe
                    
ddescribe("An exclusive run suite", function() {
    it("with a spec", function() {
        expect(true).toBe(true);
    });
});
                
run specific specs with iit
                    
describe("A suite", function() {
    iit("with a exclusive run spec", function() {
        expect(true).toBe(true);
    });
});
                
UNIT TESTING ANGULARJS
Angular = separation of concerns
Create highly cohesive, low coupled pieces of functionality
Easier to test
UNIT TESTING ANGULARJS
getting the module
injecting the controller
                            
beforeEach(module('app'));
                        
                            
beforeEach(inject(function($controller, $rootScope) {
    controller = $controller;
    scope = $rootscope.$new();
}));
                        
UNIT TESTING ANGULARJS - CONTROLLER
                    
'use strict';
anguler.module('app')
    .controller('FakeController', function($scope, someRecords) {
    $scope.someRecords = someRecords;
});
                
UNIT TESTING ANGULARJS - CONTROLLER
                    
describe("FakeController", function() {
    var someRecords;
    beforeEach(module('app'));
    beforeEach(inject(function($rootScope, $controller) {
        $scope = $rootScope.$new();
        givenSomeRecords();
        dependencies = {
            $scope : $scope,
            someRecords : someRecords
        };
        $controller('FakeController', dependencies);
    });
    it('when initialized', function() {
        thenSomeRecordsAreOnScope();
    });
    function givenSomeRecords() {
        someRecords = {
            test : 'test'
        };
    };
    function thenSomeRecordsAreOnScope() {
        expect($scope.someRecords).toEqual(someRecords);
    }
});
                
UNIT TESTING ANGULARJS - SERVICE
                    
'use strict';
    anguler.module('app')
        .service('FakeService', function($http) {
    this.getIsFake = function() {
        return $http.get('fakeService/isFake');
    };
});
                
UNIT TESTING ANGULARJS - SERVICE
                    
describe('FakeService', function() {
    var resolved;
    beforeEach(module('app'));
    beforeEach(inject(function(_$httpBackend_, _FakeService_) {
        $httpBackend = _$httpBackend_;
        FakeService = _FakeService_;
    }));
    it('Resolver returns resolved promise', function() {
        givenMockIsFake();
        whenGetIsFakeCalled();
        thenPromiseIsResolved();
    });
    function givenMockIsFake() {
        $httpBackend.expectGET('fakeService/isFake').respond(200, 'true');
    }
    function whenGetIsFakeCalled() {
        FakeService.getIsFake().then(function(promise) {
            resolved = true;
        });
        $httpBackend.flush();
    }
    function thenPromiseIsResolved() {
        expect(resolved).toBeTruthy();
    }
});
                
UNIT TESTING ANGULARJS - DIRECTIVE
                    
'use strict';
anguler.module('app').directive('fixedPhoneNumberFormat', function() {
    return {
        scope : {
            fixedPhoneNumberFormat : '@'
        },
        link : function(scope, element, attrs) {
            attrs.$observe('fixedPhoneNumberFormat', function(fixedPhoneNumber) 
                if (_.isEqual(fixedPhoneNumber.length, 8){
                    fixedPhoneNumber = "0" + fixedPhoneNumber;
                }
                element.text(fixedPhoneNumber.substring(0, 2)
                    + " / " + fixedPhoneNumber.substring(2, 5)
                    + " " + fixedPhoneNumber.substring(5, 7)
                    + " " + fixedPhoneNumber.substring(7, 9));
            });
        }
    };
});
                
UNIT TESTING ANGULARJS - DIRECTIVE
                    
describe('FixedPhoneNumberDirective', function() {
    var element = {};
    var formattedFixedPhoneNumber;
    beforeEach(module('app'));
    beforeEach(inject(function($rootScope, _$compile_) {
        $scope = $rootScope.$new();
        $compile = _$compile_;
    }));
    it("formatfixedphonewithcode", function() {
        givenTemplate();
        $scope.fixedPhoneNumber = "025021910"; //givenFixedPhoneNumberWithNineDigits();
        formattedFixedPhoneNumber = "02 / 502 19 10"; //givenFormatFixedPhoneNumber();
        whenFormatFixedPhoneNumber();
        thenFixedPhoneNumberIsFormatted();
    });
    function givenTemplate() {
        var template = '<div data­fixed­phone­number­format="{{fixedPoneNumber}}">{{fixedPhoneNumber}}<
        element = $compile(template)($scope);
    }
    function whenFormatFixedPhoneNumber() {
        $scope.$digest();
    }
    function thenFixedPhoneNumberIsFormatted() {
        expect(element.text()).toBe(formattedFixedPhoneNumber);
    }
});
                
COVERAGE REPORTS
Karma can generate coverage reports
Uses istanbul.js behind the scenes
Multiple report types
HTML
LCOV
Text
Cobertura
KARMA COVERAGE CONFIGURATION
Add a preprocessor
Add a reporter
Configure the reporter
                        
preprocessors = {'**/lib/*.js': 'coverage'};
                    
                        
reporters = ['coverage'];
                    
                        
coverageReporter = {type : 'lcovonly',dir : 'coverage/'}
                    
LCOV FILE EXAMPLE
                        
TN:
SF:../app/scripts/app.js
FN:20,(anonymous_1)
FNF:1
FNH:1
FNDA:3,(anonymous_1)
DA:11,1
DA:21,3
LF:2
LH:2
BRF:0
BRH:0
...
                    
LCOV SONAR INTEGRATION
RESOURCES
AngularJS website
QUnit website
Mocha website
Jasmine website
Karma website
Istanbul website
SinonJS website
Sonar website
THAAAAAAANKS!
Dennis Jaamann — Frédéric Ghijselinck
—@dennisjaamann @f_ghijselinck
CC Front-end & UX
Ad

Recommended

Testing Web Applications
Testing Web Applications
Seth McLaughlin
 
High Performance JavaScript - jQuery Conference SF Bay Area 2010
High Performance JavaScript - jQuery Conference SF Bay Area 2010
Nicholas Zakas
 
Testing nightwatch, by David Torroija
Testing nightwatch, by David Torroija
David Torroija
 
How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016
How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016
Gavin Pickin
 
Selenium & PHPUnit made easy with Steward (Berlin, April 2017)
Selenium & PHPUnit made easy with Steward (Berlin, April 2017)
Ondřej Machulda
 
Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...
Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...
Ondřej Machulda
 
JavaScript Timers, Power Consumption, and Performance
JavaScript Timers, Power Consumption, and Performance
Nicholas Zakas
 
Agile JavaScript Testing
Agile JavaScript Testing
Scott Becker
 
Marvel of Annotation Preprocessing in Java by Alexey Buzdin
Marvel of Annotation Preprocessing in Java by Alexey Buzdin
Java User Group Latvia
 
Painless JavaScript Testing with Jest
Painless JavaScript Testing with Jest
Michał Pierzchała
 
Avoiding Common Pitfalls in Ember.js
Avoiding Common Pitfalls in Ember.js
Alex Speller
 
Responsive interfaces
Responsive interfaces
Nicholas Zakas
 
High Performance JavaScript - WebDirections USA 2010
High Performance JavaScript - WebDirections USA 2010
Nicholas Zakas
 
Building a JavaScript Library
Building a JavaScript Library
jeresig
 
Token Testing Slides
Token Testing Slides
ericholscher
 
Quick tour to front end unit testing using jasmine
Quick tour to front end unit testing using jasmine
Gil Fink
 
Javascript training sample
Javascript training sample
prahalad_das_in
 
Developing, Testing and Scaling with Apache Camel - UberConf 2015
Developing, Testing and Scaling with Apache Camel - UberConf 2015
Matt Raible
 
Apache Camel - FUSE community day London 2010 presentation
Apache Camel - FUSE community day London 2010 presentation
Claus Ibsen
 
Flavors of Concurrency in Java
Flavors of Concurrency in Java
JavaDayUA
 
Unit testing JavaScript: Jasmine & karma intro
Unit testing JavaScript: Jasmine & karma intro
Maurice De Beijer [MVP]
 
JavaScript Test-Driven Development with Jasmine 2.0 and Karma
JavaScript Test-Driven Development with Jasmine 2.0 and Karma
Christopher Bartling
 
Григорий Шехет "Treasure hunt in the land of Reactive frameworks"
Григорий Шехет "Treasure hunt in the land of Reactive frameworks"
Fwdays
 
Intro to testing Javascript with jasmine
Intro to testing Javascript with jasmine
Timothy Oxley
 
JavaScript TDD with Jasmine and Karma
JavaScript TDD with Jasmine and Karma
Christopher Bartling
 
Jest: Frontend Testing leicht gemacht @EnterJS2018
Jest: Frontend Testing leicht gemacht @EnterJS2018
Holger Grosse-Plankermann
 
Angularjs - Unit testing introduction
Angularjs - Unit testing introduction
Nir Kaufman
 
Unit testing in JavaScript with Jasmine and Karma
Unit testing in JavaScript with Jasmine and Karma
Andrey Kolodnitsky
 
Big data elasticsearch practical
Big data elasticsearch practical
JWORKS powered by Ordina
 
thesis
thesis
Andrew Schick
 

More Related Content

What's hot (20)

Marvel of Annotation Preprocessing in Java by Alexey Buzdin
Marvel of Annotation Preprocessing in Java by Alexey Buzdin
Java User Group Latvia
 
Painless JavaScript Testing with Jest
Painless JavaScript Testing with Jest
Michał Pierzchała
 
Avoiding Common Pitfalls in Ember.js
Avoiding Common Pitfalls in Ember.js
Alex Speller
 
Responsive interfaces
Responsive interfaces
Nicholas Zakas
 
High Performance JavaScript - WebDirections USA 2010
High Performance JavaScript - WebDirections USA 2010
Nicholas Zakas
 
Building a JavaScript Library
Building a JavaScript Library
jeresig
 
Token Testing Slides
Token Testing Slides
ericholscher
 
Quick tour to front end unit testing using jasmine
Quick tour to front end unit testing using jasmine
Gil Fink
 
Javascript training sample
Javascript training sample
prahalad_das_in
 
Developing, Testing and Scaling with Apache Camel - UberConf 2015
Developing, Testing and Scaling with Apache Camel - UberConf 2015
Matt Raible
 
Apache Camel - FUSE community day London 2010 presentation
Apache Camel - FUSE community day London 2010 presentation
Claus Ibsen
 
Flavors of Concurrency in Java
Flavors of Concurrency in Java
JavaDayUA
 
Unit testing JavaScript: Jasmine & karma intro
Unit testing JavaScript: Jasmine & karma intro
Maurice De Beijer [MVP]
 
JavaScript Test-Driven Development with Jasmine 2.0 and Karma
JavaScript Test-Driven Development with Jasmine 2.0 and Karma
Christopher Bartling
 
Григорий Шехет "Treasure hunt in the land of Reactive frameworks"
Григорий Шехет "Treasure hunt in the land of Reactive frameworks"
Fwdays
 
Intro to testing Javascript with jasmine
Intro to testing Javascript with jasmine
Timothy Oxley
 
JavaScript TDD with Jasmine and Karma
JavaScript TDD with Jasmine and Karma
Christopher Bartling
 
Jest: Frontend Testing leicht gemacht @EnterJS2018
Jest: Frontend Testing leicht gemacht @EnterJS2018
Holger Grosse-Plankermann
 
Angularjs - Unit testing introduction
Angularjs - Unit testing introduction
Nir Kaufman
 
Unit testing in JavaScript with Jasmine and Karma
Unit testing in JavaScript with Jasmine and Karma
Andrey Kolodnitsky
 
Marvel of Annotation Preprocessing in Java by Alexey Buzdin
Marvel of Annotation Preprocessing in Java by Alexey Buzdin
Java User Group Latvia
 
Painless JavaScript Testing with Jest
Painless JavaScript Testing with Jest
Michał Pierzchała
 
Avoiding Common Pitfalls in Ember.js
Avoiding Common Pitfalls in Ember.js
Alex Speller
 
High Performance JavaScript - WebDirections USA 2010
High Performance JavaScript - WebDirections USA 2010
Nicholas Zakas
 
Building a JavaScript Library
Building a JavaScript Library
jeresig
 
Token Testing Slides
Token Testing Slides
ericholscher
 
Quick tour to front end unit testing using jasmine
Quick tour to front end unit testing using jasmine
Gil Fink
 
Javascript training sample
Javascript training sample
prahalad_das_in
 
Developing, Testing and Scaling with Apache Camel - UberConf 2015
Developing, Testing and Scaling with Apache Camel - UberConf 2015
Matt Raible
 
Apache Camel - FUSE community day London 2010 presentation
Apache Camel - FUSE community day London 2010 presentation
Claus Ibsen
 
Flavors of Concurrency in Java
Flavors of Concurrency in Java
JavaDayUA
 
Unit testing JavaScript: Jasmine & karma intro
Unit testing JavaScript: Jasmine & karma intro
Maurice De Beijer [MVP]
 
JavaScript Test-Driven Development with Jasmine 2.0 and Karma
JavaScript Test-Driven Development with Jasmine 2.0 and Karma
Christopher Bartling
 
Григорий Шехет "Treasure hunt in the land of Reactive frameworks"
Григорий Шехет "Treasure hunt in the land of Reactive frameworks"
Fwdays
 
Intro to testing Javascript with jasmine
Intro to testing Javascript with jasmine
Timothy Oxley
 
JavaScript TDD with Jasmine and Karma
JavaScript TDD with Jasmine and Karma
Christopher Bartling
 
Jest: Frontend Testing leicht gemacht @EnterJS2018
Jest: Frontend Testing leicht gemacht @EnterJS2018
Holger Grosse-Plankermann
 
Angularjs - Unit testing introduction
Angularjs - Unit testing introduction
Nir Kaufman
 
Unit testing in JavaScript with Jasmine and Karma
Unit testing in JavaScript with Jasmine and Karma
Andrey Kolodnitsky
 

Viewers also liked (6)

Big data elasticsearch practical
Big data elasticsearch practical
JWORKS powered by Ordina
 
thesis
thesis
Andrew Schick
 
Frontend Build Tools - CC FE & UX
Frontend Build Tools - CC FE & UX
JWORKS powered by Ordina
 
Integration testing - A&BP CC
Integration testing - A&BP CC
JWORKS powered by Ordina
 
IoT: LoRa and Java on the PI
IoT: LoRa and Java on the PI
JWORKS powered by Ordina
 
Introduction to Webpack - Ordina JWorks - CC JS & Web
Introduction to Webpack - Ordina JWorks - CC JS & Web
JWORKS powered by Ordina
 
Ad

Similar to Unit Testing in AngularJS - CC FE & UX (20)

Testing in AngularJS
Testing in AngularJS
Peter Drinnan
 
Unit Testing and Coverage for AngularJS
Unit Testing and Coverage for AngularJS
Knoldus Inc.
 
Slaven tomac unit testing in angular js
Slaven tomac unit testing in angular js
Slaven Tomac
 
Testing angular js
Testing angular js
galan83
 
Angular Unit Testing
Angular Unit Testing
Avi Engelshtein
 
Angular Testing
Angular Testing
Kourosh Sajjadi
 
Unit Testing in Angular
Unit Testing in Angular
Knoldus Inc.
 
JavaCro'14 - Unit testing in AngularJS – Slaven Tomac
JavaCro'14 - Unit testing in AngularJS – Slaven Tomac
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
AngularJS Unit Testing
AngularJS Unit Testing
Prince Norin
 
Demo tests unitaires karma jasmine - strasbourg js - decembre 2016
Demo tests unitaires karma jasmine - strasbourg js - decembre 2016
kraeger
 
What the HTML? - The Holy Grail
What the HTML? - The Holy Grail
James Ford
 
AngularJS Unit Test
AngularJS Unit Test
Chiew Carol
 
Js unit testing
Js unit testing
Mihail Irintchev
 
An Introduction To Testing In AngularJS Applications
An Introduction To Testing In AngularJS Applications
Rohan Chandane
 
Angular Unit Testing
Angular Unit Testing
Alessandro Giorgetti
 
Intro to Unit Testing in AngularJS
Intro to Unit Testing in AngularJS
Jim Lynch
 
Javascript Unit Testing Tools
Javascript Unit Testing Tools
PixelCrayons
 
AngularJS Unit Testing w/Karma and Jasmine
AngularJS Unit Testing w/Karma and Jasmine
foxp2code
 
Unit testing of java script and angularjs application using Karma Jasmine Fra...
Unit testing of java script and angularjs application using Karma Jasmine Fra...
Samyak Bhalerao
 
Angular Unit Test
Angular Unit Test
Michael Haberman
 
Testing in AngularJS
Testing in AngularJS
Peter Drinnan
 
Unit Testing and Coverage for AngularJS
Unit Testing and Coverage for AngularJS
Knoldus Inc.
 
Slaven tomac unit testing in angular js
Slaven tomac unit testing in angular js
Slaven Tomac
 
Testing angular js
Testing angular js
galan83
 
Unit Testing in Angular
Unit Testing in Angular
Knoldus Inc.
 
AngularJS Unit Testing
AngularJS Unit Testing
Prince Norin
 
Demo tests unitaires karma jasmine - strasbourg js - decembre 2016
Demo tests unitaires karma jasmine - strasbourg js - decembre 2016
kraeger
 
What the HTML? - The Holy Grail
What the HTML? - The Holy Grail
James Ford
 
AngularJS Unit Test
AngularJS Unit Test
Chiew Carol
 
An Introduction To Testing In AngularJS Applications
An Introduction To Testing In AngularJS Applications
Rohan Chandane
 
Intro to Unit Testing in AngularJS
Intro to Unit Testing in AngularJS
Jim Lynch
 
Javascript Unit Testing Tools
Javascript Unit Testing Tools
PixelCrayons
 
AngularJS Unit Testing w/Karma and Jasmine
AngularJS Unit Testing w/Karma and Jasmine
foxp2code
 
Unit testing of java script and angularjs application using Karma Jasmine Fra...
Unit testing of java script and angularjs application using Karma Jasmine Fra...
Samyak Bhalerao
 
Ad

More from JWORKS powered by Ordina (20)

Lagom in Practice
Lagom in Practice
JWORKS powered by Ordina
 
Netflix OSS and HATEOAS deployed on production - JavaLand
Netflix OSS and HATEOAS deployed on production - JavaLand
JWORKS powered by Ordina
 
Cc internet of things @ Thomas More
Cc internet of things @ Thomas More
JWORKS powered by Ordina
 
Introduction to Docker
Introduction to Docker
JWORKS powered by Ordina
 
An introduction to Cloud Foundry
An introduction to Cloud Foundry
JWORKS powered by Ordina
 
Cc internet of things LoRa and IoT - Innovation Enablers
Cc internet of things LoRa and IoT - Innovation Enablers
JWORKS powered by Ordina
 
Mongodb @ vrt
Mongodb @ vrt
JWORKS powered by Ordina
 
Mongo db intro.pptx
Mongo db intro.pptx
JWORKS powered by Ordina
 
Big data document and graph d bs - couch-db and orientdb
Big data document and graph d bs - couch-db and orientdb
JWORKS powered by Ordina
 
Big data key-value and column stores redis - cassandra
Big data key-value and column stores redis - cassandra
JWORKS powered by Ordina
 
Hadoop bootcamp getting started
Hadoop bootcamp getting started
JWORKS powered by Ordina
 
Intro to cassandra
Intro to cassandra
JWORKS powered by Ordina
 
Android wear - CC Mobile
Android wear - CC Mobile
JWORKS powered by Ordina
 
Clean Code - A&BP CC
Clean Code - A&BP CC
JWORKS powered by Ordina
 
Unit testing - A&BP CC
Unit testing - A&BP CC
JWORKS powered by Ordina
 
Documenting your REST API with Swagger - JOIN 2014
Documenting your REST API with Swagger - JOIN 2014
JWORKS powered by Ordina
 
Spring 4 - A&BP CC
Spring 4 - A&BP CC
JWORKS powered by Ordina
 
Android secure offline storage - CC Mobile
Android secure offline storage - CC Mobile
JWORKS powered by Ordina
 
Meteor - JOIN 2015
Meteor - JOIN 2015
JWORKS powered by Ordina
 
Batch Processing - A&BP CC
Batch Processing - A&BP CC
JWORKS powered by Ordina
 
Netflix OSS and HATEOAS deployed on production - JavaLand
Netflix OSS and HATEOAS deployed on production - JavaLand
JWORKS powered by Ordina
 
Cc internet of things LoRa and IoT - Innovation Enablers
Cc internet of things LoRa and IoT - Innovation Enablers
JWORKS powered by Ordina
 
Big data document and graph d bs - couch-db and orientdb
Big data document and graph d bs - couch-db and orientdb
JWORKS powered by Ordina
 
Big data key-value and column stores redis - cassandra
Big data key-value and column stores redis - cassandra
JWORKS powered by Ordina
 
Documenting your REST API with Swagger - JOIN 2014
Documenting your REST API with Swagger - JOIN 2014
JWORKS powered by Ordina
 
Android secure offline storage - CC Mobile
Android secure offline storage - CC Mobile
JWORKS powered by Ordina
 

Recently uploaded (20)

B M Mostofa Kamal Al-Azad [Document & Localization Expert]
B M Mostofa Kamal Al-Azad [Document & Localization Expert]
Mostofa Kamal Al-Azad
 
Global Networking Trends, presented at the India ISP Conclave 2025
Global Networking Trends, presented at the India ISP Conclave 2025
APNIC
 
最新版加拿大奎斯特大学毕业证(QUC毕业证书)原版定制
最新版加拿大奎斯特大学毕业证(QUC毕业证书)原版定制
taqyed
 
BASICS OF SAP _ ALL ABOUT SAP _WHY SAP OVER ANY OTHER ERP SYSTEM
BASICS OF SAP _ ALL ABOUT SAP _WHY SAP OVER ANY OTHER ERP SYSTEM
AhmadAli716831
 
PROCESS FOR CREATION OF BUSINESS PARTNER IN SAP
PROCESS FOR CREATION OF BUSINESS PARTNER IN SAP
AhmadAli716831
 
Make DDoS expensive for the threat actors
Make DDoS expensive for the threat actors
APNIC
 
Topic 1 Foundational IT Infrastructure_.pptx
Topic 1 Foundational IT Infrastructure_.pptx
oneillp100
 
原版澳洲斯文本科技大学毕业证(SUT毕业证书)如何办理
原版澳洲斯文本科技大学毕业证(SUT毕业证书)如何办理
taqyed
 
IAREUOUSTPIDWHY$)CHARACTERARERWUEEJJSKWNSND
IAREUOUSTPIDWHY$)CHARACTERARERWUEEJJSKWNSND
notgachabite123
 
Paper: The World Game (s) Great Redesign.pdf
Paper: The World Game (s) Great Redesign.pdf
Steven McGee
 
ChatGPT A.I. Powered Chatbot and Popularization.pdf
ChatGPT A.I. Powered Chatbot and Popularization.pdf
StanleySamson1
 
DDoS in India, presented at INNOG 8 by Dave Phelan
DDoS in India, presented at INNOG 8 by Dave Phelan
APNIC
 
inside the internet - understanding the TCP/IP protocol
inside the internet - understanding the TCP/IP protocol
shainweniton02
 
Logging and Automated Alerting Webinar.pdf
Logging and Automated Alerting Webinar.pdf
ControlCase
 
Transmission Control Protocol (TCP) and Starlink
Transmission Control Protocol (TCP) and Starlink
APNIC
 
Clive Dickens RedTech Public Copy - Collaborate or Die
Clive Dickens RedTech Public Copy - Collaborate or Die
Clive Dickens
 
Lecture 3.1 Analysing the Global Business Environment .pptx
Lecture 3.1 Analysing the Global Business Environment .pptx
shofalbsb
 
ChatGPT_and_Its_Uses_Presentationss.pptx
ChatGPT_and_Its_Uses_Presentationss.pptx
Neha Prakash
 
Topic 2 - Cloud Computing Basics,,,.pptx
Topic 2 - Cloud Computing Basics,,,.pptx
oneillp100
 
最新版美国特拉华大学毕业证(UDel毕业证书)原版定制
最新版美国特拉华大学毕业证(UDel毕业证书)原版定制
taqyea
 
B M Mostofa Kamal Al-Azad [Document & Localization Expert]
B M Mostofa Kamal Al-Azad [Document & Localization Expert]
Mostofa Kamal Al-Azad
 
Global Networking Trends, presented at the India ISP Conclave 2025
Global Networking Trends, presented at the India ISP Conclave 2025
APNIC
 
最新版加拿大奎斯特大学毕业证(QUC毕业证书)原版定制
最新版加拿大奎斯特大学毕业证(QUC毕业证书)原版定制
taqyed
 
BASICS OF SAP _ ALL ABOUT SAP _WHY SAP OVER ANY OTHER ERP SYSTEM
BASICS OF SAP _ ALL ABOUT SAP _WHY SAP OVER ANY OTHER ERP SYSTEM
AhmadAli716831
 
PROCESS FOR CREATION OF BUSINESS PARTNER IN SAP
PROCESS FOR CREATION OF BUSINESS PARTNER IN SAP
AhmadAli716831
 
Make DDoS expensive for the threat actors
Make DDoS expensive for the threat actors
APNIC
 
Topic 1 Foundational IT Infrastructure_.pptx
Topic 1 Foundational IT Infrastructure_.pptx
oneillp100
 
原版澳洲斯文本科技大学毕业证(SUT毕业证书)如何办理
原版澳洲斯文本科技大学毕业证(SUT毕业证书)如何办理
taqyed
 
IAREUOUSTPIDWHY$)CHARACTERARERWUEEJJSKWNSND
IAREUOUSTPIDWHY$)CHARACTERARERWUEEJJSKWNSND
notgachabite123
 
Paper: The World Game (s) Great Redesign.pdf
Paper: The World Game (s) Great Redesign.pdf
Steven McGee
 
ChatGPT A.I. Powered Chatbot and Popularization.pdf
ChatGPT A.I. Powered Chatbot and Popularization.pdf
StanleySamson1
 
DDoS in India, presented at INNOG 8 by Dave Phelan
DDoS in India, presented at INNOG 8 by Dave Phelan
APNIC
 
inside the internet - understanding the TCP/IP protocol
inside the internet - understanding the TCP/IP protocol
shainweniton02
 
Logging and Automated Alerting Webinar.pdf
Logging and Automated Alerting Webinar.pdf
ControlCase
 
Transmission Control Protocol (TCP) and Starlink
Transmission Control Protocol (TCP) and Starlink
APNIC
 
Clive Dickens RedTech Public Copy - Collaborate or Die
Clive Dickens RedTech Public Copy - Collaborate or Die
Clive Dickens
 
Lecture 3.1 Analysing the Global Business Environment .pptx
Lecture 3.1 Analysing the Global Business Environment .pptx
shofalbsb
 
ChatGPT_and_Its_Uses_Presentationss.pptx
ChatGPT_and_Its_Uses_Presentationss.pptx
Neha Prakash
 
Topic 2 - Cloud Computing Basics,,,.pptx
Topic 2 - Cloud Computing Basics,,,.pptx
oneillp100
 
最新版美国特拉华大学毕业证(UDel毕业证书)原版定制
最新版美国特拉华大学毕业证(UDel毕业证书)原版定制
taqyea
 

Unit Testing in AngularJS - CC FE & UX