SlideShare a Scribd company logo
1 of 50
Download to read offline
EXAMPLE-FIRST
A Sane Test-Driven Approach16/01/18
JS OXFORD
16/01/18JS OXFORD
What’s a Test?
16/01/18JS OXFORD
A Simple Unit Test
class	Calculator	{	
	
				sum(a,	b)	{	
								return	a	+	b;	
				}	
	
}	
	
let	calc	=	new	Calculator();	
	
let	result	=	calc.sum(1,	2);	
	
assert.equal(result,	3);	
Class Unit Test
Test Driven Development
[test]
A procedure intended to
establish the performance,
or reliability of something,
especially before it is taken
into widespread use.
To do something in order
to discover if something is
safe, works correctly, etc.,
or if something is present
Noun Verb
Kent Beck
“Rediscovered” TDD in 1994
“TDD By Example” –
Published 2002
Test-Driven Development by Example
Test-Driven Development is a way of
managing fear during programming
Kent Beck - 2002
MAKE IT
PASS
REFACTOR
WRITE
FAILING
TEST
RED / GREEN / REFACTOR
MAKE IT
PASS
REFACTOR
WRITE
FAILING
TEST
3 RULES OF TEST DRIVEN DESIGN
1.  No code unless you’re making a test pass
2.  Stop writing the test as soon as it fails
3.  Write only enough code to make it green
16/01/18JS OXFORD
Testing tools and frameworks
16/01/18JS OXFORD
Jasmine - Expectations
let	calculator	=	new	Calculator();	
	
calculator.sum(1,	2);
16/01/18JS OXFORD
Jasmine - Expectations
let	calculator	=	new	Calculator();	
	
expect(calculator.sum(1,	2)).toBe(3)
Jasmine - Expectations
Declaration	 Behavior	
expect(2	-	1).toBe(1)	
Expect(2).not.toBe(1)	
Argument	must	match	a	value	exactly	
person1	=	{age:	12}	
person2	=	{age:	14}	
	
expect(person1).not.toEqual(person2)	
Matches	(or	not)	objects	or	arrays	
let	message	=	'foo	bar'	
	
expect(message).toMatch(/bar/)	
expect(message).not.toMatch(/abc/)	
Matches	regular	expression	
expect(value).toBeDefined()	
expect(value).toBeNull()	
Matches	undefined	or	null
16/01/18
What we need
npm	install	–g	jasmine	webpack	
	
npm	install	--save-dev	jasmine	jasmine-spec-reporter
16/01/18JS Oxford
What we need
export	JASMINE_CONFIG_PATH=jasmine.json	
{	
		"spec_dir":	"spec",	
		"spec_files":	[	
				"**/*.js"	
		],	
		"helpers":	[	
				"../jasmine/**/*.js"	
		],	
		"stopSpecOnExpectationFailure":	false,	
		"random":	false	
}
16/01/18JS OXFORD
What we need
Examples in –
git	clone	https://github.com/jon-acker/js-oxford-tdd
ü  Returns	0	for	an	empty	string	
ü  Returns	the	“bare”	number	given	one	number	
ü  Returns	the	sum	of	two	numbers	separated	by	space	
ü  Returns	the	sum	of	several	numbers	separated	by	space	
ü  Returns	the	sum	of	any	“whitespace”	space-separated	string	
StringCalculator
16/01/18JS OXFORD
Demo
An Object–Oriented View
An Object–Oriented View
Customer
Acme
System
Compliance
Checker
Telephone
Directory
isListed
register
Test Doubles
-  Fake
-  Stand in for a class/function that does not exist yet
-  Stub
-  Fake that returns fixed data (indirect outputs)
-  Mock
-  Stub that can capture the indirect outputs for later observation
-  Spy
-  Spy on method calls and capture inputs with expectations
[Meszaros 2007]
An Object–Oriented View
Customer
Acme
System
Compliance
Checker
Telephone
Directory
isListed
register
Object
under test
Test Doubles
Spy
Stub
Stub declaration
Declaration	 Effect	
spyOn(obj,'method').and.returnValue(value)	 Will	cause	value	to	be	returned	
spyOn(obj,'method').and.returnValues(val1,	val2)	 Return	values	in	order	of	
calling	
spyOn(obj,'method').and.throwError('error')	 Will	cause	exception	with	
string	‘error’	
spyOn(obj,'method’).and.callThrough()	 Will	return	the	return	value	of	
the	original	function
Spy expectations
Declaration	 Expectation	
expect(obj.method).toHaveBeenCalled()	
expect(obj.method).not.toHaveBeenCalled()	
	
Expected	obj.method()	to	be	called	
toHaveBeenCalledWith(args)	
not.toHaveBeenCalledWith(args)	
	
Expected	[or	not	expected]	to	be	
called	with	arguments	
expect(obj.method.calls.count()).toBe(2)	 Tracks	number	of	times	spy	was	
called	
expect(obj.method).toHaveBeenCalledWith(	
				12,	jasmine.anything()	
)	
Expected	object.method(12,	***)	to	
be	called
An Object – Oriented View
Customer
Acme
System
Compliance
Checker
Telephone
Directory
isListed
register
expect(system.register).toHaveBeenCalledWith(user)	
spyOn(directory,	‘isListed’).and.returnValue(true)	
spyOn(system,	‘register’)
module.exports	=	function	CustomerFactory(system,	directory)	{	
				let	acmeSystem	=	system;	
				let	telephoneDirectory	=	directory;	
	
				return	new	class	Customer	{	
	
							/**	
								*	@param	{string}	name		
								*/	
								named(name)	{	
												let	customer	=	new	Customer();	
												customer.name	=	name;	
												return	customer;	
								}	
	
								/**	
									*	Register	customer	on	Acme	system		
									*/	
								register()	{	
												if	(!telephoneDirectory.lists(this.name))	{	
																throw	new	Error('Customer	'	+	this.name	+	'	is	not	in	directory');	
												}	
													
												acmeSystem.register(this);	
								}	
				};	
};	
Dependencies
const	CustomerFactory	=	require('../src/Customer');	
const	telephoneDirectory	=	jasmine.createSpyObj('telephoneDirectory',	['list',	'lists']);	
const	acmeSystem	=	require('../src/acmeSystem');	
	
let	customer;	
	
beforeEach(function()	{	
				customer	=	CustomerFactory(acmeSystem,	telephoneDirectory).named('Jon');	
				spyOn(acmeSystem,	'register');	
});	
	
it('Throws	exception	when	registering	with	name	that	is	not	in	directory',	function()	{	
				telephoneDirectory.lists.and.returnValue(false);	
	
				expect(()	=>	customer.register()).toThrowError('Customer	'	+	customer.name	+	'	is	not	in	directory');	
	
				expect(telephoneDirectory.lists).toHaveBeenCalledWith(customer);	
				expect(acmeSystem.register).not.toHaveBeenCalled();	
});	
	
it('Can	be	registered	when	name	is	listed	in	directory',	function()	{	
				telephoneDirectory.lists.and.returnValue(true);	
										
				customer.register();	
	
				expect(telephoneDirectory.lists).toHaveBeenCalledWith(customer);	
				expect(acmeSystem.register).toHaveBeenCalledWith(customer);	
});
it('Can	be	registered	when	name	is	listed	in	directory',	function()	{	
				telephoneDirectory.lists.and.returnValue(true);	
										
				customer.register();	
	
				expect(telephoneDirectory.lists).toHaveBeenCalledWith(customer);	
				expect(acmeSystem.register).toHaveBeenCalledWith(customer);	
});	
Arrange / Act/ Assert
Arrange
Act!
Assert
Don’t rush ahead with more
code.
Instead, add another example
and let it guide you to what you
have to do next.
- David Chelimsky 2010
A Language Shift
Test Driven Development
By
Examples
A Language Shift
Fun
Profit
Business Requirements
What is software development driven by?
Requirements Examples
What is software development driven by?
– Incremental and iterative development
– Short feedback loops
– Never write code without a failing test
Steve Freeman & Nat Pryce – 2009
A More Holistic Approach
TDD is described as
A Design Activity
“Start by writing an acceptance test” – Freeman & Pryce 2009
ATDD – Acceptance Test Driven
Outer-loop / Inner-loop
Behavior Driven Development
16/01/18JS OXFORD
BDD – Dan North’s Definition
BDD is a second-generation, outside-in, pull-based,
multiple-stakeholder, multiple-scale, high-
automation, agile methodology.
16/01/18JS OXFORD
BDD – Liz Keogh’s Definition
BDD is the art of using examples in conversation to
illustrate behaviour.
16/01/18JS OXFORD
A Behavior Driven Approach?
Behavior Driven Development
Rules:	
	-	Customers	must	be	listed	in	the	phone	directory	to	register	with	Acme	
	
Scenario:	Customer	cannot	be	registered	if	they	are	not	in	the	phone	directory	
				Given	Jon	is	not	listed	in	the	Greater	London	telephone	directory	
				When	Jon	tries	to	register	for	Acme	Systems	
				Then	Jon	should	be	told	they	cannot	register	because	they	are	not	listed
Background:	
				Given	Acme's	compliance	system	requires	customers	to	be	at	least	18	years	old	
	
Scenario:	Customer	cannot	be	registered	if	they	are	not	in	the	phone	directory	
				Given	Jon	is	not	listed	in	the	Greater	London	telephone	directory	
				When	Jon	tries	to	register	for	Acme	Systems	
				Then	Jon	should	be	told	they	cannot	be	registered	because	they	are	not	listed	
				And	Jon	should	not	be	registered	with	Acme	Systems	
	
Scenario:	Customer	cannot	be	registered	if	they	are	not	compliant	with	Acme's	rules	
				Given	Jon	is	listed	in	the	Greater	London	telephone	directory	
				But	Jon	is	only	16	years	old	
				When	Jon	tries	to	register	for	Acme	Systems	
				Then	Jon	should	be	told	that	he	must	be	at	least	18	to	register	
				And	Jon	should	not	be	registered	with	Acme	Systems	
	
Scenario:	Customer	successfully	registers	with	Acme	(finally!)	
				Given	Jon	is	listed	in	the	Greater	London	telephone	directory	
				And	Jon	is	20	years	old	
				When	Jon	tries	to	register	for	Acme	Systems	
				Then	Acme	Systems	should	now	have	Jon	registered	as	a	customer
When('{string}	tries	to	register	for	Acme	Systems',	function	(customerName,	cb)	{	
	
				try	{	
								customer.register();	
				}	catch	(e)	{	
								caughtException	=	e.message;	
				}	
	
				cb();	
});	
	
Then('{string}	are	told	they	cannot	register	...',	function	(customerName,	cb)	{	
				expect(caughtException).to.equal('Customer	'+customerName+'	is	not	in	listed');	
	
				cb();	
});
it('Can	be	registered	when	name	is	listed	in	directory',	function()	{	
				telephoneDirectory.lists.and.returnValue(true);	
										
				customer.register();	
	
				expect(telephoneDirectory.lists).toHaveBeenCalledWith(customer);	
				expect(acmeSystem.register).toHaveBeenCalledWith(customer);	
});	
Given/ When/ Then
Given
When!
Then
16/01/18JS OXFORD
BDD = TDD for the business J
Driven!
ü Examples drive code
ü Business requirements drive code
16/01/18JS OXFORD
The DOM In The Room
You Don’t Need to Test the DOM
16/01/18JS OXFORD
module.exports	=	class	Page	{	
				constructor($element)	{	
								this.$element	=	$element;	
				}	
	
				display(total)	{	
								this.$element.animate({	
												borderWidth:	30	
								},	1000).text(total);	
				}	
};
You Don’t Need to Test the DOM
16/01/18JS OXFORD
const	dom	=	new	JSDOM("<html><div	id='main'></div></html>");	
	
$element	=	jQuery('#main');	
	
spyOn($element,	'animate').and.returnValue($element);	
	
let	page	=	new	Page($element);	
	
page.display(total);	
	
expect($element.animate).toHaveBeenCalledWith({borderRadius:	
100});
16/01/18JS OXFORD
Really want to test the UI ??!
http://appraise.qa
16/01/18JS OXFORD
Pros & Cons of TDD
¨  100% test coverage (almost)
¨  Less fear of changing code
¨  Code guided (by tests)
¨  Loose coupling – high cohesion
¨  Instant feedback on code
¨  More testable code
¨  Living documentation
¨  Risky to change code
¨  Addition time spent upfront
¨  Can be less productive
¨  No assurance of optimal code
¨  Hard to adopt and master
¨  Test maintenance
17/01/18JS OXFORD
Pros Cons
THANK YOU!
16/01/18JS OXFORD
__@jacker__
digitaloxford.slack.com: Jon Acker

More Related Content

What's hot

TDD CrashCourse Part4: Improving Testing
TDD CrashCourse Part4: Improving TestingTDD CrashCourse Part4: Improving Testing
TDD CrashCourse Part4: Improving TestingDavid Rodenas
 
Introduction to nsubstitute
Introduction to nsubstituteIntroduction to nsubstitute
Introduction to nsubstituteSuresh Loganatha
 
Stop Making Excuses and Start Testing Your JavaScript
Stop Making Excuses and Start Testing Your JavaScriptStop Making Excuses and Start Testing Your JavaScript
Stop Making Excuses and Start Testing Your JavaScriptRyan Anklam
 
Tdd for BT E2E test community
Tdd for BT E2E test communityTdd for BT E2E test community
Tdd for BT E2E test communityKerry Buckley
 
Unit Test Your Database
Unit Test Your DatabaseUnit Test Your Database
Unit Test Your DatabaseDavid Wheeler
 
In search of JavaScript code quality: unit testing
In search of JavaScript code quality: unit testingIn search of JavaScript code quality: unit testing
In search of JavaScript code quality: unit testingAnna Khabibullina
 
Dependency Injection
Dependency InjectionDependency Injection
Dependency InjectionIndrit Selimi
 
An introduction to Google test framework
An introduction to Google test frameworkAn introduction to Google test framework
An introduction to Google test frameworkAbner Chih Yi Huang
 
Testing logging in asp dot net core
Testing logging in asp dot net coreTesting logging in asp dot net core
Testing logging in asp dot net coreRajesh Shirsagar
 
Applying TDD to Legacy Code
Applying TDD to Legacy CodeApplying TDD to Legacy Code
Applying TDD to Legacy CodeAlexander Goida
 
Google mock for dummies
Google mock for dummiesGoogle mock for dummies
Google mock for dummiesHarry Potter
 

What's hot (20)

Test driven development
Test driven developmentTest driven development
Test driven development
 
Tdd iPhone For Dummies
Tdd iPhone For DummiesTdd iPhone For Dummies
Tdd iPhone For Dummies
 
Agile Swift
Agile SwiftAgile Swift
Agile Swift
 
TDD CrashCourse Part4: Improving Testing
TDD CrashCourse Part4: Improving TestingTDD CrashCourse Part4: Improving Testing
TDD CrashCourse Part4: Improving Testing
 
Effective Unit Testing
Effective Unit TestingEffective Unit Testing
Effective Unit Testing
 
JUnit Pioneer
JUnit PioneerJUnit Pioneer
JUnit Pioneer
 
Introduction to nsubstitute
Introduction to nsubstituteIntroduction to nsubstitute
Introduction to nsubstitute
 
Stop Making Excuses and Start Testing Your JavaScript
Stop Making Excuses and Start Testing Your JavaScriptStop Making Excuses and Start Testing Your JavaScript
Stop Making Excuses and Start Testing Your JavaScript
 
Tdd for BT E2E test community
Tdd for BT E2E test communityTdd for BT E2E test community
Tdd for BT E2E test community
 
Unit Test Your Database
Unit Test Your DatabaseUnit Test Your Database
Unit Test Your Database
 
TDD, BDD and mocks
TDD, BDD and mocksTDD, BDD and mocks
TDD, BDD and mocks
 
Introduzione al TDD
Introduzione al TDDIntroduzione al TDD
Introduzione al TDD
 
What's new in C# 8.0 (beta)
What's new in C# 8.0 (beta)What's new in C# 8.0 (beta)
What's new in C# 8.0 (beta)
 
3 j unit
3 j unit3 j unit
3 j unit
 
In search of JavaScript code quality: unit testing
In search of JavaScript code quality: unit testingIn search of JavaScript code quality: unit testing
In search of JavaScript code quality: unit testing
 
Dependency Injection
Dependency InjectionDependency Injection
Dependency Injection
 
An introduction to Google test framework
An introduction to Google test frameworkAn introduction to Google test framework
An introduction to Google test framework
 
Testing logging in asp dot net core
Testing logging in asp dot net coreTesting logging in asp dot net core
Testing logging in asp dot net core
 
Applying TDD to Legacy Code
Applying TDD to Legacy CodeApplying TDD to Legacy Code
Applying TDD to Legacy Code
 
Google mock for dummies
Google mock for dummiesGoogle mock for dummies
Google mock for dummies
 

Similar to Test-Driven JavaScript Development

Testers guide to unit testing
Testers guide to unit testingTesters guide to unit testing
Testers guide to unit testingCraig Risi
 
MT_01_unittest_python.pdf
MT_01_unittest_python.pdfMT_01_unittest_python.pdf
MT_01_unittest_python.pdfHans Jones
 
Programming with GUTs
Programming with GUTsProgramming with GUTs
Programming with GUTscatherinewall
 
DSR Testing (Part 1)
DSR Testing (Part 1)DSR Testing (Part 1)
DSR Testing (Part 1)Steve Upton
 
Python: Object-Oriented Testing (Unit Testing)
Python: Object-Oriented Testing (Unit Testing)Python: Object-Oriented Testing (Unit Testing)
Python: Object-Oriented Testing (Unit Testing)Damian T. Gordon
 
JavaScript Editions ES7, ES8 and ES9 vs V8
JavaScript Editions ES7, ES8 and ES9 vs V8JavaScript Editions ES7, ES8 and ES9 vs V8
JavaScript Editions ES7, ES8 and ES9 vs V8Rafael Casuso Romate
 
Unit testing with Spock Framework
Unit testing with Spock FrameworkUnit testing with Spock Framework
Unit testing with Spock FrameworkEugene Dvorkin
 
Tests unitaires mock_kesako_20130516
Tests unitaires mock_kesako_20130516Tests unitaires mock_kesako_20130516
Tests unitaires mock_kesako_20130516SOAT
 
We Are All Testers Now: The Testing Pyramid and Front-End Development
We Are All Testers Now: The Testing Pyramid and Front-End DevelopmentWe Are All Testers Now: The Testing Pyramid and Front-End Development
We Are All Testers Now: The Testing Pyramid and Front-End DevelopmentAll Things Open
 
Pitfalls Of Tdd Adoption by Bartosz Bankowski
Pitfalls Of Tdd Adoption by Bartosz BankowskiPitfalls Of Tdd Adoption by Bartosz Bankowski
Pitfalls Of Tdd Adoption by Bartosz BankowskiAgileee
 
Javascript tdd byandreapaciolla
Javascript tdd byandreapaciollaJavascript tdd byandreapaciolla
Javascript tdd byandreapaciollaAndrea Paciolla
 
TEST AUTOMATION: AKA QUALITY CONTROL
TEST AUTOMATION: AKA QUALITY CONTROLTEST AUTOMATION: AKA QUALITY CONTROL
TEST AUTOMATION: AKA QUALITY CONTROLNyarai Tinashe Gomiwa
 
TEST AUTOMATION: AKA QUALITY CONTROL
TEST AUTOMATION: AKA QUALITY CONTROLTEST AUTOMATION: AKA QUALITY CONTROL
TEST AUTOMATION: AKA QUALITY CONTROLSovTech
 
SystemVerilog Assertion.pptx
SystemVerilog Assertion.pptxSystemVerilog Assertion.pptx
SystemVerilog Assertion.pptxNothing!
 
Grails unit testing
Grails unit testingGrails unit testing
Grails unit testingpleeps
 
Testing in Python: doctest and unittest
Testing in Python: doctest and unittestTesting in Python: doctest and unittest
Testing in Python: doctest and unittestFariz Darari
 
Intro to Unit Testing in AngularJS
Intro to Unit Testing in AngularJSIntro to Unit Testing in AngularJS
Intro to Unit Testing in AngularJSJim Lynch
 

Similar to Test-Driven JavaScript Development (20)

Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
Testers guide to unit testing
Testers guide to unit testingTesters guide to unit testing
Testers guide to unit testing
 
MT_01_unittest_python.pdf
MT_01_unittest_python.pdfMT_01_unittest_python.pdf
MT_01_unittest_python.pdf
 
Programming with GUTs
Programming with GUTsProgramming with GUTs
Programming with GUTs
 
DSR Testing (Part 1)
DSR Testing (Part 1)DSR Testing (Part 1)
DSR Testing (Part 1)
 
Python: Object-Oriented Testing (Unit Testing)
Python: Object-Oriented Testing (Unit Testing)Python: Object-Oriented Testing (Unit Testing)
Python: Object-Oriented Testing (Unit Testing)
 
JavaScript Editions ES7, ES8 and ES9 vs V8
JavaScript Editions ES7, ES8 and ES9 vs V8JavaScript Editions ES7, ES8 and ES9 vs V8
JavaScript Editions ES7, ES8 and ES9 vs V8
 
Unit testing with Spock Framework
Unit testing with Spock FrameworkUnit testing with Spock Framework
Unit testing with Spock Framework
 
Tests unitaires mock_kesako_20130516
Tests unitaires mock_kesako_20130516Tests unitaires mock_kesako_20130516
Tests unitaires mock_kesako_20130516
 
We Are All Testers Now: The Testing Pyramid and Front-End Development
We Are All Testers Now: The Testing Pyramid and Front-End DevelopmentWe Are All Testers Now: The Testing Pyramid and Front-End Development
We Are All Testers Now: The Testing Pyramid and Front-End Development
 
Pitfalls Of Tdd Adoption by Bartosz Bankowski
Pitfalls Of Tdd Adoption by Bartosz BankowskiPitfalls Of Tdd Adoption by Bartosz Bankowski
Pitfalls Of Tdd Adoption by Bartosz Bankowski
 
Javascript tdd byandreapaciolla
Javascript tdd byandreapaciollaJavascript tdd byandreapaciolla
Javascript tdd byandreapaciolla
 
Design for Testability
Design for TestabilityDesign for Testability
Design for Testability
 
TEST AUTOMATION: AKA QUALITY CONTROL
TEST AUTOMATION: AKA QUALITY CONTROLTEST AUTOMATION: AKA QUALITY CONTROL
TEST AUTOMATION: AKA QUALITY CONTROL
 
TEST AUTOMATION: AKA QUALITY CONTROL
TEST AUTOMATION: AKA QUALITY CONTROLTEST AUTOMATION: AKA QUALITY CONTROL
TEST AUTOMATION: AKA QUALITY CONTROL
 
SystemVerilog Assertion.pptx
SystemVerilog Assertion.pptxSystemVerilog Assertion.pptx
SystemVerilog Assertion.pptx
 
Grails unit testing
Grails unit testingGrails unit testing
Grails unit testing
 
Testing in Python: doctest and unittest
Testing in Python: doctest and unittestTesting in Python: doctest and unittest
Testing in Python: doctest and unittest
 
Unit testing with JUnit
Unit testing with JUnitUnit testing with JUnit
Unit testing with JUnit
 
Intro to Unit Testing in AngularJS
Intro to Unit Testing in AngularJSIntro to Unit Testing in AngularJS
Intro to Unit Testing in AngularJS
 

Recently uploaded

Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...gurkirankumar98700
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...soniya singh
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataBradBedford3
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackVICTOR MAESTRE RAMIREZ
 
Engage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyEngage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyFrank van der Linden
 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about usDynamic Netsoft
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)OPEN KNOWLEDGE GmbH
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfjoe51371421
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityNeo4j
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...Christina Lin
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software DevelopersVinodh Ram
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEOrtus Solutions, Corp
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfkalichargn70th171
 

Recently uploaded (20)

Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStack
 
Engage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyEngage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The Ugly
 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about us
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdf
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered Sustainability
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software Developers
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
 

Test-Driven JavaScript Development