SlideShare ist ein Scribd-Unternehmen logo
1 von 20
NodeJs
testing tools and continuous integration
Davide Fiorello
Mocha
• Javascript Test Framework
• Run in Node.js and Browser
environment
• BDD, TDD, QUnit
• Synchronous and Asynchronous
Mocha - Interfaces
• BDD
1 describe('My first test', function(){
2 it('pass it!!');
3 });
• TDD
1 suite('Array', function(){
2 setup(function(){
3 });
4
5 suite('#indexOf()', function(){
6 test('should return -1 when not present', function(){
7 // ASSERT
8 });
9 });
10 });
Mocha - Sync, Async,
Pending
1 describe('Let's test..', function() {
2 it('Test something sync', function() {
3 // ASSERT
4 });
5
6 it('Test something async', function(done) {
7 user.save(function(err){
8 if (err) throw err;
9 // ASSERT
10 done();
11 });
12 });
13
14 it('Pending test');
15 });
Mocha - Before, After, ...
1 describe('Let's test..', function() {
2 before(function(){
3 // ...
4 });
5
6 beforeEach(function(done){
7 // ... -> done()
8 });
9
10 after(function(){
11 // ...
12 });
13
14 afterEach(function(){
15 // ...
16 });
17 });
Mocha - Only, skip
1 describe('A test', function() {
2 it.only('Test only this', function(done) {
3 // ...
4 });
5 });
6
7 describe('Another test', function() {
8 it.skip('Don't test this', function(done) {
9 // ...
10 });
11 });
Mocha - Has not...
• Assert (should.js, chai, expect.js)
• Spy/Mock/Stub (sinon)
• Code Coverage (istanbul, node-
jscoverage)
Should.js
should is an expressive, readable, test
framework agnostic, assertion library.
Main goals of this library to be expressive
and to be helpful.
It keeps your test code clean, and your
error messages helpful.
Should.js
1 var should = require('should');
2
3 var user = { name: 'davide', pets: ['tobi', 'loki']};
4
5 user.should.have.property('name', 'davide');
6 user.should.have.property('pets').with.lengthOf(2);
7
8 should(user).have.property('name', 'davide');
9 should(true).ok;
10
11 should.exist(user);
It extends the Object.prototype with a single non-
enumerable getter that allows you to express how that
object should behave, also it returns itself when required
with require.
Should.js - Chaining
assertions
.ok, .true, .false, .eql, .equal, .startWith, .endWith,
.within, .above, .belove, .instanceOf, .Array, .Object,
.String, .Error, .property, .length, .keys, .match, .throw,
.throwError, .json, .html
1 var should = require('should');
2
3 var user = { name: 'davide', age : 22, pets : ['pit',
'fuffy']};
4
5 user.name.should.match(/dav/);
6 user.age.should.be.above(18);
7 user.pets.should.be.Array;
8 user.pets.should.containEql('pit');
9 user.pets.should.not.containEql('mark');
Should.js - Chaining
assertions
1 var should = require('should');
2
3 var user = { name: 'davide', age : 22};
4
5 user.age.should.be.greaterThan(18).and.be.lessThan(33);
6
7 user.age.should.greaterThan(18).lessThan(33);
.an, .of, .a,.and, .be, .have, .with, .is, .which
Use them for better readability; they do nothing at all
Sinon.js
Standalone test spies, stubs and mocks for
JavaScript.No dependencies, works with any unit testing
framework.
Sinon.js
• Spies
• Stubs
• Mocks
• Fake timers
• Fake XHR
• Fake server
• Sandboxing
• Assertions
• Matchers
Sinon.js - spies
1 var sinon = require('sinon');
2 var should = require('should');
3
4 function myFunc(value) {
5 myObject.check(value);
6 }
7
8 var myObject = {
9 check : function(value) {
10 // DO Something
11 }
12 };
13 var spy = sinon.spy(myObject, "check");
14 myFunc('test');
15 spy.called.should.be.true;
Sinon.js - spies (API)
.withArgs, .callCount, .called, .calledOnce,
.firstCall, .lastCall, .calledBefore, .calledAfter,
.calledWith, .alwaysCalledWith,
.neverCalledWith, .threw, .returned, .args,
.returnValues
Sinon.js - stubs
1 var sinon = require('sinon');
2 var should = require('should');
3
4 function myFunc() {
5 return myObject.check();
6 }
7
8 var myObject = {
9 check : function() {
10 return 10;
11 // DO Something
12 }
13 };
14 var stub = sinon.stub(myObject, "check");
15 stub.onFirstCall().returns(1)
16 .onSecondCall().returns(2);
17
18 myFunc('test').should.be.equal(1);
19 myFunc('test').should.be.equal(2);
Sinon.js - Stub (API)
.withArgs, .onCall, .onFirstCall,
.onSecondCall, .returns, .returnsThis,
.returnsArg, .throws, .callsArg, .yelds,
.callArgWith, .callArgAsync
Useful Modules
• node-mocks-http
• node-rest-client
• pow-mongodb-fixtures
• readyness
Continuous Integration
• drone.io
• travis-ci.io
• codeship.io
Thanks!!
Davide Fiorello
davide@codeflyer.com
github.com/codeflyer

Weitere ähnliche Inhalte

Was ist angesagt?

10 Catalyst Tips
10 Catalyst Tips10 Catalyst Tips
10 Catalyst TipsJay Shirley
 
Real World Mocking In Swift
Real World Mocking In SwiftReal World Mocking In Swift
Real World Mocking In SwiftVeronica Lillie
 
How we're using Firebase at Boiler Room
How we're using Firebase at Boiler RoomHow we're using Firebase at Boiler Room
How we're using Firebase at Boiler RoomLukas Klein
 
Linux kernel debugging
Linux kernel debuggingLinux kernel debugging
Linux kernel debuggingJungMinSEO5
 
Practical JavaScript Programming - Session 6/8
Practical JavaScript Programming - Session 6/8Practical JavaScript Programming - Session 6/8
Practical JavaScript Programming - Session 6/8Wilson Su
 
Synchronisation de périphériques avec Javascript et PouchDB
Synchronisation de périphériques avec Javascript et PouchDBSynchronisation de périphériques avec Javascript et PouchDB
Synchronisation de périphériques avec Javascript et PouchDBFrank Rousseau
 
C++ Programming - 9th Study
C++ Programming - 9th StudyC++ Programming - 9th Study
C++ Programming - 9th StudyChris Ohk
 
C++ Programming - 12th Study
C++ Programming - 12th StudyC++ Programming - 12th Study
C++ Programming - 12th StudyChris Ohk
 
DEF CON 23 - amit ashbel and maty siman - game of hacks
DEF CON 23 - amit ashbel and maty siman - game of hacks DEF CON 23 - amit ashbel and maty siman - game of hacks
DEF CON 23 - amit ashbel and maty siman - game of hacks Felipe Prado
 
rsyslog v8: more than just syslog!
rsyslog v8: more than just syslog!rsyslog v8: more than just syslog!
rsyslog v8: more than just syslog!Yury Bushmelev
 
Rich and Snappy Apps (No Scaling Required)
Rich and Snappy Apps (No Scaling Required)Rich and Snappy Apps (No Scaling Required)
Rich and Snappy Apps (No Scaling Required)Thomas Fuchs
 
Modern Getopt for Command Line Processing in Perl
Modern Getopt for Command Line Processing in PerlModern Getopt for Command Line Processing in Perl
Modern Getopt for Command Line Processing in PerlNova Patch
 
Extreme JavaScript Performance
Extreme JavaScript PerformanceExtreme JavaScript Performance
Extreme JavaScript PerformanceThomas Fuchs
 

Was ist angesagt? (20)

Intro to Sail.js
Intro to Sail.jsIntro to Sail.js
Intro to Sail.js
 
10 Catalyst Tips
10 Catalyst Tips10 Catalyst Tips
10 Catalyst Tips
 
hacking with node.JS
hacking with node.JShacking with node.JS
hacking with node.JS
 
Real World Mocking In Swift
Real World Mocking In SwiftReal World Mocking In Swift
Real World Mocking In Swift
 
Node.js 0.8 features
Node.js 0.8 featuresNode.js 0.8 features
Node.js 0.8 features
 
How we're using Firebase at Boiler Room
How we're using Firebase at Boiler RoomHow we're using Firebase at Boiler Room
How we're using Firebase at Boiler Room
 
Linux kernel debugging
Linux kernel debuggingLinux kernel debugging
Linux kernel debugging
 
Live Updating Swift Code
Live Updating Swift CodeLive Updating Swift Code
Live Updating Swift Code
 
Practical JavaScript Programming - Session 6/8
Practical JavaScript Programming - Session 6/8Practical JavaScript Programming - Session 6/8
Practical JavaScript Programming - Session 6/8
 
Synchronisation de périphériques avec Javascript et PouchDB
Synchronisation de périphériques avec Javascript et PouchDBSynchronisation de périphériques avec Javascript et PouchDB
Synchronisation de périphériques avec Javascript et PouchDB
 
C++ Programming - 9th Study
C++ Programming - 9th StudyC++ Programming - 9th Study
C++ Programming - 9th Study
 
C++ Programming - 12th Study
C++ Programming - 12th StudyC++ Programming - 12th Study
C++ Programming - 12th Study
 
DEF CON 23 - amit ashbel and maty siman - game of hacks
DEF CON 23 - amit ashbel and maty siman - game of hacks DEF CON 23 - amit ashbel and maty siman - game of hacks
DEF CON 23 - amit ashbel and maty siman - game of hacks
 
rsyslog v8: more than just syslog!
rsyslog v8: more than just syslog!rsyslog v8: more than just syslog!
rsyslog v8: more than just syslog!
 
PL/SQL Unit Testing Can Be Fun
PL/SQL Unit Testing Can Be FunPL/SQL Unit Testing Can Be Fun
PL/SQL Unit Testing Can Be Fun
 
Rich and Snappy Apps (No Scaling Required)
Rich and Snappy Apps (No Scaling Required)Rich and Snappy Apps (No Scaling Required)
Rich and Snappy Apps (No Scaling Required)
 
Modern Getopt for Command Line Processing in Perl
Modern Getopt for Command Line Processing in PerlModern Getopt for Command Line Processing in Perl
Modern Getopt for Command Line Processing in Perl
 
Ruby tricks2
Ruby tricks2Ruby tricks2
Ruby tricks2
 
Extreme JavaScript Performance
Extreme JavaScript PerformanceExtreme JavaScript Performance
Extreme JavaScript Performance
 
Node.js - A Quick Tour
Node.js - A Quick TourNode.js - A Quick Tour
Node.js - A Quick Tour
 

Ähnlich wie Test innode

Test driven node.js
Test driven node.jsTest driven node.js
Test driven node.jsJay Harris
 
JavaScript Proven Practises
JavaScript Proven PractisesJavaScript Proven Practises
JavaScript Proven PractisesRobert MacLean
 
2013-06-15 - Software Craftsmanship mit JavaScript
2013-06-15 - Software Craftsmanship mit JavaScript2013-06-15 - Software Craftsmanship mit JavaScript
2013-06-15 - Software Craftsmanship mit JavaScriptJohannes Hoppe
 
2013-06-24 - Software Craftsmanship with JavaScript
2013-06-24 - Software Craftsmanship with JavaScript2013-06-24 - Software Craftsmanship with JavaScript
2013-06-24 - Software Craftsmanship with JavaScriptJohannes Hoppe
 
Painless JavaScript Testing with Jest
Painless JavaScript Testing with JestPainless JavaScript Testing with Jest
Painless JavaScript Testing with JestMichał Pierzchała
 
Conf soat tests_unitaires_Mockito_jUnit_170113
Conf soat tests_unitaires_Mockito_jUnit_170113Conf soat tests_unitaires_Mockito_jUnit_170113
Conf soat tests_unitaires_Mockito_jUnit_170113SOAT
 
Browser testing with nightwatch.js - Drupal Europe
Browser testing with nightwatch.js - Drupal EuropeBrowser testing with nightwatch.js - Drupal Europe
Browser testing with nightwatch.js - Drupal EuropeSalvador Molina (Slv_)
 
How to test complex SaaS applications - The family july 2014
How to test complex SaaS applications - The family july 2014How to test complex SaaS applications - The family july 2014
How to test complex SaaS applications - The family july 2014Guillaume POTIER
 
Como NÃO testar o seu projeto de Software. DevDay 2014
Como NÃO testar o seu projeto de Software. DevDay 2014Como NÃO testar o seu projeto de Software. DevDay 2014
Como NÃO testar o seu projeto de Software. DevDay 2014alexandre freire
 
Developer Test - Things to Know
Developer Test - Things to KnowDeveloper Test - Things to Know
Developer Test - Things to Knowvilniusjug
 
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
 
Test-Driven Development of AngularJS Applications
Test-Driven Development of AngularJS ApplicationsTest-Driven Development of AngularJS Applications
Test-Driven Development of AngularJS ApplicationsFITC
 
PHPunit and you
PHPunit and youPHPunit and you
PHPunit and youmarkstory
 
Angularjs Test Driven Development (TDD)
Angularjs Test Driven Development (TDD)Angularjs Test Driven Development (TDD)
Angularjs Test Driven Development (TDD)Anis Bouhachem Djer
 
Unit Testing Express Middleware
Unit Testing Express MiddlewareUnit Testing Express Middleware
Unit Testing Express MiddlewareMorris Singer
 
Building and Scaling Node.js Applications
Building and Scaling Node.js ApplicationsBuilding and Scaling Node.js Applications
Building and Scaling Node.js ApplicationsOhad Kravchick
 
Js fwdays unit tesing javascript(by Anna Khabibullina)
Js fwdays unit tesing javascript(by Anna Khabibullina)Js fwdays unit tesing javascript(by Anna Khabibullina)
Js fwdays unit tesing javascript(by Anna Khabibullina)Anna Khabibullina
 

Ähnlich wie Test innode (20)

Test driven node.js
Test driven node.jsTest driven node.js
Test driven node.js
 
JavaScript Proven Practises
JavaScript Proven PractisesJavaScript Proven Practises
JavaScript Proven Practises
 
2013-06-15 - Software Craftsmanship mit JavaScript
2013-06-15 - Software Craftsmanship mit JavaScript2013-06-15 - Software Craftsmanship mit JavaScript
2013-06-15 - Software Craftsmanship mit JavaScript
 
2013-06-24 - Software Craftsmanship with JavaScript
2013-06-24 - Software Craftsmanship with JavaScript2013-06-24 - Software Craftsmanship with JavaScript
2013-06-24 - Software Craftsmanship with JavaScript
 
Painless JavaScript Testing with Jest
Painless JavaScript Testing with JestPainless JavaScript Testing with Jest
Painless JavaScript Testing with Jest
 
Conf soat tests_unitaires_Mockito_jUnit_170113
Conf soat tests_unitaires_Mockito_jUnit_170113Conf soat tests_unitaires_Mockito_jUnit_170113
Conf soat tests_unitaires_Mockito_jUnit_170113
 
Browser testing with nightwatch.js - Drupal Europe
Browser testing with nightwatch.js - Drupal EuropeBrowser testing with nightwatch.js - Drupal Europe
Browser testing with nightwatch.js - Drupal Europe
 
How to test complex SaaS applications - The family july 2014
How to test complex SaaS applications - The family july 2014How to test complex SaaS applications - The family july 2014
How to test complex SaaS applications - The family july 2014
 
Como NÃO testar o seu projeto de Software. DevDay 2014
Como NÃO testar o seu projeto de Software. DevDay 2014Como NÃO testar o seu projeto de Software. DevDay 2014
Como NÃO testar o seu projeto de Software. DevDay 2014
 
Developer Test - Things to Know
Developer Test - Things to KnowDeveloper Test - Things to Know
Developer Test - Things to Know
 
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
 
ES2015 workflows
ES2015 workflowsES2015 workflows
ES2015 workflows
 
Test-Driven Development of AngularJS Applications
Test-Driven Development of AngularJS ApplicationsTest-Driven Development of AngularJS Applications
Test-Driven Development of AngularJS Applications
 
PHPunit and you
PHPunit and youPHPunit and you
PHPunit and you
 
Backbone.js
Backbone.jsBackbone.js
Backbone.js
 
Angularjs Test Driven Development (TDD)
Angularjs Test Driven Development (TDD)Angularjs Test Driven Development (TDD)
Angularjs Test Driven Development (TDD)
 
Unit Testing Express Middleware
Unit Testing Express MiddlewareUnit Testing Express Middleware
Unit Testing Express Middleware
 
Testing in JavaScript
Testing in JavaScriptTesting in JavaScript
Testing in JavaScript
 
Building and Scaling Node.js Applications
Building and Scaling Node.js ApplicationsBuilding and Scaling Node.js Applications
Building and Scaling Node.js Applications
 
Js fwdays unit tesing javascript(by Anna Khabibullina)
Js fwdays unit tesing javascript(by Anna Khabibullina)Js fwdays unit tesing javascript(by Anna Khabibullina)
Js fwdays unit tesing javascript(by Anna Khabibullina)
 

Kürzlich hochgeladen

The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Visualising and forecasting stocks using Dash
Visualising and forecasting stocks using DashVisualising and forecasting stocks using Dash
Visualising and forecasting stocks using Dashnarutouzumaki53779
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...AliaaTarek5
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 

Kürzlich hochgeladen (20)

The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Visualising and forecasting stocks using Dash
Visualising and forecasting stocks using DashVisualising and forecasting stocks using Dash
Visualising and forecasting stocks using Dash
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 

Test innode

  • 1. NodeJs testing tools and continuous integration Davide Fiorello
  • 2. Mocha • Javascript Test Framework • Run in Node.js and Browser environment • BDD, TDD, QUnit • Synchronous and Asynchronous
  • 3. Mocha - Interfaces • BDD 1 describe('My first test', function(){ 2 it('pass it!!'); 3 }); • TDD 1 suite('Array', function(){ 2 setup(function(){ 3 }); 4 5 suite('#indexOf()', function(){ 6 test('should return -1 when not present', function(){ 7 // ASSERT 8 }); 9 }); 10 });
  • 4. Mocha - Sync, Async, Pending 1 describe('Let's test..', function() { 2 it('Test something sync', function() { 3 // ASSERT 4 }); 5 6 it('Test something async', function(done) { 7 user.save(function(err){ 8 if (err) throw err; 9 // ASSERT 10 done(); 11 }); 12 }); 13 14 it('Pending test'); 15 });
  • 5. Mocha - Before, After, ... 1 describe('Let's test..', function() { 2 before(function(){ 3 // ... 4 }); 5 6 beforeEach(function(done){ 7 // ... -> done() 8 }); 9 10 after(function(){ 11 // ... 12 }); 13 14 afterEach(function(){ 15 // ... 16 }); 17 });
  • 6. Mocha - Only, skip 1 describe('A test', function() { 2 it.only('Test only this', function(done) { 3 // ... 4 }); 5 }); 6 7 describe('Another test', function() { 8 it.skip('Don't test this', function(done) { 9 // ... 10 }); 11 });
  • 7. Mocha - Has not... • Assert (should.js, chai, expect.js) • Spy/Mock/Stub (sinon) • Code Coverage (istanbul, node- jscoverage)
  • 8. Should.js should is an expressive, readable, test framework agnostic, assertion library. Main goals of this library to be expressive and to be helpful. It keeps your test code clean, and your error messages helpful.
  • 9. Should.js 1 var should = require('should'); 2 3 var user = { name: 'davide', pets: ['tobi', 'loki']}; 4 5 user.should.have.property('name', 'davide'); 6 user.should.have.property('pets').with.lengthOf(2); 7 8 should(user).have.property('name', 'davide'); 9 should(true).ok; 10 11 should.exist(user); It extends the Object.prototype with a single non- enumerable getter that allows you to express how that object should behave, also it returns itself when required with require.
  • 10. Should.js - Chaining assertions .ok, .true, .false, .eql, .equal, .startWith, .endWith, .within, .above, .belove, .instanceOf, .Array, .Object, .String, .Error, .property, .length, .keys, .match, .throw, .throwError, .json, .html 1 var should = require('should'); 2 3 var user = { name: 'davide', age : 22, pets : ['pit', 'fuffy']}; 4 5 user.name.should.match(/dav/); 6 user.age.should.be.above(18); 7 user.pets.should.be.Array; 8 user.pets.should.containEql('pit'); 9 user.pets.should.not.containEql('mark');
  • 11. Should.js - Chaining assertions 1 var should = require('should'); 2 3 var user = { name: 'davide', age : 22}; 4 5 user.age.should.be.greaterThan(18).and.be.lessThan(33); 6 7 user.age.should.greaterThan(18).lessThan(33); .an, .of, .a,.and, .be, .have, .with, .is, .which Use them for better readability; they do nothing at all
  • 12. Sinon.js Standalone test spies, stubs and mocks for JavaScript.No dependencies, works with any unit testing framework.
  • 13. Sinon.js • Spies • Stubs • Mocks • Fake timers • Fake XHR • Fake server • Sandboxing • Assertions • Matchers
  • 14. Sinon.js - spies 1 var sinon = require('sinon'); 2 var should = require('should'); 3 4 function myFunc(value) { 5 myObject.check(value); 6 } 7 8 var myObject = { 9 check : function(value) { 10 // DO Something 11 } 12 }; 13 var spy = sinon.spy(myObject, "check"); 14 myFunc('test'); 15 spy.called.should.be.true;
  • 15. Sinon.js - spies (API) .withArgs, .callCount, .called, .calledOnce, .firstCall, .lastCall, .calledBefore, .calledAfter, .calledWith, .alwaysCalledWith, .neverCalledWith, .threw, .returned, .args, .returnValues
  • 16. Sinon.js - stubs 1 var sinon = require('sinon'); 2 var should = require('should'); 3 4 function myFunc() { 5 return myObject.check(); 6 } 7 8 var myObject = { 9 check : function() { 10 return 10; 11 // DO Something 12 } 13 }; 14 var stub = sinon.stub(myObject, "check"); 15 stub.onFirstCall().returns(1) 16 .onSecondCall().returns(2); 17 18 myFunc('test').should.be.equal(1); 19 myFunc('test').should.be.equal(2);
  • 17. Sinon.js - Stub (API) .withArgs, .onCall, .onFirstCall, .onSecondCall, .returns, .returnsThis, .returnsArg, .throws, .callsArg, .yelds, .callArgWith, .callArgAsync
  • 18. Useful Modules • node-mocks-http • node-rest-client • pow-mongodb-fixtures • readyness
  • 19. Continuous Integration • drone.io • travis-ci.io • codeship.io