SlideShare una empresa de Scribd logo
1 de 68
Descargar para leer sin conexión
AUTOMATED END-TO-END
TESTING WITH NIGHTWATCH.js
Vladimir Roudakov
29 Sep 2016 Front End bit.ly/dce16-nwatch
Vladimir ROUDAKOV
bit.ly/dce16-nwatch
@VladimirAus
Prologue
WHY TESTING?
SOFTWARE DEVELOPMENT CYCLE
REQUIREMENTS
TESTS
IMPLEMENTATION
1. Requirements
● Search for surname
● Display person’s information
2. Manual test
● Go to search engine
● Type surname into search box
● Check for result in right hand side area
3. Automated test
● A: URL is available and <body> is visible
● B: Search button is visible
● Enter surname and click search
● C: Right hand side area is visible
● D: Right hand side area contains person’s details
module.exports = {
'As a user I want to see name prediction in right hand side block' :
function (browser) {
browser
.url('http://www.google.com')
.waitForElementVisible('body', 1000)
.setValue('input[type=text]', 'buytaert')
.waitForElementVisible('button[name=btnG]', 1000)
.click('button[name=btnG]')
.waitForElementVisible('#rhs_block', 1000)
.assert.containsText('#main', 'Dries Buytaert')
.end();
}
};
4. Running the test
1. Command line test runner
2. Tests are in JavaScript
3. Uses CSS selectors
● input[type=text]
● button[name=btnG]
● #rhs_block
● #main
4. Continuous Integration support
5. Cloud services support
6. Easy to extend
● Custom commands
● Custom assertions
● Custom reporters
REPORTS
STANDARD PROCESS
Developer
F1F1
F2
STANDARD PROCESS
Developer
PM
F3, ...
F1F1
F2
F1
F2
F2 ready?
Sure
STANDARD PROCESS
BA
Developer
PM
F3, ...
F1F1
F2
F1
F2
F2 ready?
Sure
Great!
To production!
STANDARD PROCESS
BA
DeveloperClient
PM
F3, ...
F1F1
F2
F1
F2
F2 ready?
Sure
Great!
To production!
F2 ready!
Great!
STANDARD PROCESS
BA
DeveloperClient
PM
F3, ...
F1F1
F2
F1
F2
F2 ready?
Sure
Great!
To production!
F2 ready!
Great!
F1?
ADDING AUTOMATED TESTING
BA
DeveloperClient
PM
F1F1
F2
ADDING AUTOMATED TESTING
BA
DeveloperClient
PM
F1F1
F2
ADDING AUTOMATED TESTING
BA
DeveloperClient
PM
F1F1
F2
ADDING AUTOMATED TESTING
BA
DeveloperClient
PM
F1F1
F2
Yes, but F1 is
broken...
F2 ready?
Who like reports?
DEVELOPERS
Technical detailed report on
● New features and existing functionality
● Integration on latest test environment and UAT
● Sprint retrospective
Who like reports?
INTERNAL TEAM: Managers, PMs, BAs
Report with less technical details on multiple environments
● Track sprint / release progress
● Measure velocity
● Integrate with internal tools: email, chat
Who like reports?
CLIENTS
Report with no technical details on pre release environment
● Test coverage
● Ability to identify missing / not clarified features
Report output
● Visual
● Command line
● JUnit XML
● Custom reporters, e.g. JSON
TESTS
Nightwatch tests
● Written in JavaScript
● Each test can have multiple assertions
module.exports = {
'As a user I want to see name prediction in right hand side block' :
function (browser) {
browser
.url('http://www.google.com')
.waitForElementVisible('body', 1000)
.setValue('input[type=text]', 'buytaert')
.waitForElementVisible('button[name=btnG]', 1000)
.click('button[name=btnG]')
.waitForElementVisible('#rhs_block', 1000)
.assert.containsText('#main', 'Dries Buytaert')
.end();
}
};
module.exports = {
'As a user I want to see name prediction in right hand side block' :
function (browser) {
browser
.url('http://www.google.com')
.waitForElementVisible('body', 1000)
.setValue('input[type=text]', 'buytaert')
.waitForElementVisible('button[name=btnG]', 1000)
.click('button[name=btnG]')
.waitForElementVisible('#rhs_block', 1000)
.assert.containsText('#main', 'Dries Buytaert')
.end();
}
};
module.exports = {
'As a user I want to see name prediction in right hand side block' :
function (browser) {
browser
.url('http://www.google.com')
.waitForElementVisible('body', 1000)
.setValue('input[type=text]', 'buytaert')
.waitForElementVisible('button[name=btnG]', 1000)
.click('button[name=btnG]')
.waitForElementVisible('#rhs_block', 1000)
.assert.containsText('#main', 'Dries Buytaert')
.end();
}
};
module.exports = {
'As a user I want to see name prediction in right hand side block' :
function (browser) {
browser
.url('http://www.google.com')
.waitForElementVisible('body', 1000)
.setValue('input[type=text]', 'buytaert')
.waitForElementVisible('button[name=btnG]', 1000)
.click('button[name=btnG]')
.waitForElementVisible('#rhs_block', 1000)
.assert.containsText('#main', 'Dries Buytaert')
.end();
}
};
module.exports = {
'As a user I want to see name prediction in right hand side block' :
function (browser) {
browser
.url('http://www.google.com')
.waitForElementVisible('body', 1000)
.setValue('input[type=text]', 'buytaert')
.waitForElementVisible('button[name=btnG]', 1000)
.click('button[name=btnG]')
.waitForElementVisible('#rhs_block', 1000)
.assert.containsText('#main', 'Dries Buytaert')
.end();
}
};
module.exports = {
'As a user I want to see name prediction in right hand side block' :
function (browser) {
browser
.url('http://www.google.com')
.waitForElementVisible('body', 1000)
.setValue('input[type=text]', 'buytaert')
.waitForElementVisible('button[name=btnG]', 1000)
.click('button[name=btnG]')
.waitForElementVisible('#rhs_block', 1000)
.assert.containsText('#main', 'Dries Buytaert')
.end();
}
};
Nightwatch tests
● Each file can have multiple tests
● Each folder can have multiple folders and files
Nightwatch tests
● Group tests according to functionality
● Tag your tests for better granular testing
module.exports = {
'@tags': ['sprint3', 'issue 15674'],
'demo login test': function (browser) {
// test code
}
};
ENVIRONMENT
Local environment - selenium
scripts driver
Selenium
● Selenium is a suite of tools to automate web browsers across
many platforms.
● Supports many operating systems
● Runs as a server on Java
● Writing tests is complicated
...
"selenium" : {
"start_process" : false,
"server_path" : "/usr/local/.../seleniumserver2.jar",
"log_path" : "",
"host" : "127.0.0.1",
"port" : 4444,
"cli_args" : {
"webdriver.chrome.driver" : "./chromedriver",
"webdriver.gecko.driver" : "./geckodriver",
"webdriver.ie.driver" : ""
}
...
Selenium web driver
Allows selenium to use native browser engines
● Firefox - new Gecko driver
● Safari - requeres
● chrome
● IE / edge browser - ability to run IE in linux
● PhantomJS
...
"selenium" : {
"start_process" : false,
"server_path" : "/usr/local/.../seleniumserver2.jar",
"log_path" : "",
"host" : "127.0.0.1",
"port" : 4444,
"cli_args" : {
"webdriver.chrome.driver" : "./chromedriver",
"webdriver.gecko.driver" : "./geckodriver",
"webdriver.ie.driver" : ""
}
...
No desktop environment - Xvfb
scripts driver
Xvfb
● Virtual screen to run browser
● Native functionality
Using cloud services
scripts
"selenium" : {
"start_process" : false,
"host": "ondemand.saucelabs.com",
"port": 80
},
"test_settings" : {
"default" : {
"output": true,
"selenium_host": "ondemand.saucelabs.com",
"selenium_port": 80,
"username": "${SAUCE_USERNAME}",
"access_key": "${SAUCE_ACCESS_KEY}",
"desiredCapabilities": {
"browserName": "chrome",
"platform": "Windows 10",
"version": "48"
"selenium" : {
"start_process" : false,
"host": "ondemand.saucelabs.com",
"port": 80
},
"test_settings" : {
"default" : {
"output": true,
"selenium_host": "ondemand.saucelabs.com",
"selenium_port": 80,
"username": "${SAUCE_USERNAME}",
"access_key": "${SAUCE_ACCESS_KEY}",
"desiredCapabilities": {
"browserName": "chrome",
"platform": "Windows 10",
"version": "48"
"selenium" : {
"start_process" : false,
"host": "ondemand.saucelabs.com",
"port": 80
},
"test_settings" : {
"default" : {
"output": true,
"selenium_host": "ondemand.saucelabs.com",
"selenium_port": 80,
"username": "${SAUCE_USERNAME}",
"access_key": "${SAUCE_ACCESS_KEY}",
"desiredCapabilities": {
"browserName": "chrome",
"platform": "Windows 10",
"version": "48"
Epilogue
WHY NIGHTWATCH.js?
Conclusion
● Command line test runner
● Uses JavaScript
● Uses CSS selectors / XPath
● Continuous Integration support
● Cloud services support
Advantages
● Test ANY website
● Complements unit testing
● Various reports
● Visual artifacts (screenshots, videos)
● CI / Cloud services support
Disadvantages
● Takes time for initial setup
● Basic cording knowledge required
Resources
● http://nightwatchjs.org/
● https://github.com/nightwatchjs/nightwatch
● http://www.seleniumhq.org/
● http://www.saucelabs.com/
More resources
JavaScript Unit Testing
Matthew Grill
https://events.drupal.org/dublin2016/sessions/javascript-unit-testing
Evaluate This Session
THANK YOU!
events.drupal.org/dublin2016/schedule
QUESTIONS?
bit.ly/dce16-nwatch
@VladimirAus

Más contenido relacionado

La actualidad más candente

Creating the interfaces of the future with the APIs of today
Creating the interfaces of the future with the APIs of todayCreating the interfaces of the future with the APIs of today
Creating the interfaces of the future with the APIs of todaygerbille
 
AngularJS Architecture
AngularJS ArchitectureAngularJS Architecture
AngularJS ArchitectureEyal Vardi
 
Modules and injector
Modules and injectorModules and injector
Modules and injectorEyal Vardi
 
Test automation & Seleniun by oren rubin
Test automation & Seleniun by oren rubinTest automation & Seleniun by oren rubin
Test automation & Seleniun by oren rubinOren Rubin
 
Angular를 활용한 웹 프론트단 개발과 2.0에서 달라진점
Angular를 활용한 웹 프론트단 개발과 2.0에서 달라진점Angular를 활용한 웹 프론트단 개발과 2.0에서 달라진점
Angular를 활용한 웹 프론트단 개발과 2.0에서 달라진점Jeado Ko
 
Introduction to Selenium and Ruby
Introduction to Selenium and RubyIntroduction to Selenium and Ruby
Introduction to Selenium and RubyYnon Perek
 
Better Testing With PHP Unit
Better Testing With PHP UnitBetter Testing With PHP Unit
Better Testing With PHP Unitsitecrafting
 
Django + Vue, JavaScript de 3ª generación para modernizar Django
Django + Vue, JavaScript de 3ª generación para modernizar DjangoDjango + Vue, JavaScript de 3ª generación para modernizar Django
Django + Vue, JavaScript de 3ª generación para modernizar DjangoJavier Abadía
 
Selenide Alternative in Practice - Implementation & Lessons learned [Selenium...
Selenide Alternative in Practice - Implementation & Lessons learned [Selenium...Selenide Alternative in Practice - Implementation & Lessons learned [Selenium...
Selenide Alternative in Practice - Implementation & Lessons learned [Selenium...Iakiv Kramarenko
 
Vue.js + Django - configuración para desarrollo con webpack y HMR
Vue.js + Django - configuración para desarrollo con webpack y HMRVue.js + Django - configuración para desarrollo con webpack y HMR
Vue.js + Django - configuración para desarrollo con webpack y HMRJavier Abadía
 
Join the darkside: Selenium testing with Nightwatch.js
Join the darkside: Selenium testing with Nightwatch.jsJoin the darkside: Selenium testing with Nightwatch.js
Join the darkside: Selenium testing with Nightwatch.jsSeth McLaughlin
 
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
 
How to Build SPA with Vue Router 2.0
How to Build SPA with Vue Router 2.0How to Build SPA with Vue Router 2.0
How to Build SPA with Vue Router 2.0Takuya Tejima
 

La actualidad más candente (20)

Vuejs testing
Vuejs testingVuejs testing
Vuejs testing
 
22 j query1
22 j query122 j query1
22 j query1
 
Creating the interfaces of the future with the APIs of today
Creating the interfaces of the future with the APIs of todayCreating the interfaces of the future with the APIs of today
Creating the interfaces of the future with the APIs of today
 
Sane Async Patterns
Sane Async PatternsSane Async Patterns
Sane Async Patterns
 
AngularJS Architecture
AngularJS ArchitectureAngularJS Architecture
AngularJS Architecture
 
Night Watch with QA
Night Watch with QANight Watch with QA
Night Watch with QA
 
Modules and injector
Modules and injectorModules and injector
Modules and injector
 
Code ceptioninstallation
Code ceptioninstallationCode ceptioninstallation
Code ceptioninstallation
 
Test automation & Seleniun by oren rubin
Test automation & Seleniun by oren rubinTest automation & Seleniun by oren rubin
Test automation & Seleniun by oren rubin
 
Backbone.js
Backbone.jsBackbone.js
Backbone.js
 
Protractor Training in Pune by QuickITDotnet
Protractor Training in Pune by QuickITDotnet Protractor Training in Pune by QuickITDotnet
Protractor Training in Pune by QuickITDotnet
 
Angular를 활용한 웹 프론트단 개발과 2.0에서 달라진점
Angular를 활용한 웹 프론트단 개발과 2.0에서 달라진점Angular를 활용한 웹 프론트단 개발과 2.0에서 달라진점
Angular를 활용한 웹 프론트단 개발과 2.0에서 달라진점
 
Introduction to Selenium and Ruby
Introduction to Selenium and RubyIntroduction to Selenium and Ruby
Introduction to Selenium and Ruby
 
Better Testing With PHP Unit
Better Testing With PHP UnitBetter Testing With PHP Unit
Better Testing With PHP Unit
 
Django + Vue, JavaScript de 3ª generación para modernizar Django
Django + Vue, JavaScript de 3ª generación para modernizar DjangoDjango + Vue, JavaScript de 3ª generación para modernizar Django
Django + Vue, JavaScript de 3ª generación para modernizar Django
 
Selenide Alternative in Practice - Implementation & Lessons learned [Selenium...
Selenide Alternative in Practice - Implementation & Lessons learned [Selenium...Selenide Alternative in Practice - Implementation & Lessons learned [Selenium...
Selenide Alternative in Practice - Implementation & Lessons learned [Selenium...
 
Vue.js + Django - configuración para desarrollo con webpack y HMR
Vue.js + Django - configuración para desarrollo con webpack y HMRVue.js + Django - configuración para desarrollo con webpack y HMR
Vue.js + Django - configuración para desarrollo con webpack y HMR
 
Join the darkside: Selenium testing with Nightwatch.js
Join the darkside: Selenium testing with Nightwatch.jsJoin the darkside: Selenium testing with Nightwatch.js
Join the darkside: Selenium testing with Nightwatch.js
 
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
 
How to Build SPA with Vue Router 2.0
How to Build SPA with Vue Router 2.0How to Build SPA with Vue Router 2.0
How to Build SPA with Vue Router 2.0
 

Destacado

DrupalGov 2017: Testing any day: guide to end to end test driven Drupal projects
DrupalGov 2017: Testing any day: guide to end to end test driven Drupal projectsDrupalGov 2017: Testing any day: guide to end to end test driven Drupal projects
DrupalGov 2017: Testing any day: guide to end to end test driven Drupal projectsVladimir Roudakov
 
Testing nightwatch, by David Torroija
Testing nightwatch, by David TorroijaTesting nightwatch, by David Torroija
Testing nightwatch, by David TorroijaDavid Torroija
 
The Javascript Toolkit 2.0
The Javascript Toolkit 2.0The Javascript Toolkit 2.0
The Javascript Toolkit 2.0Marcos Vinícius
 
Evolving legacy to microservices and ddd
Evolving legacy to microservices and dddEvolving legacy to microservices and ddd
Evolving legacy to microservices and dddMarcos Vinícius
 
Browser Automated Testing Frameworks - Nightwatch.js
Browser Automated Testing Frameworks - Nightwatch.jsBrowser Automated Testing Frameworks - Nightwatch.js
Browser Automated Testing Frameworks - Nightwatch.jsLuís Bastião Silva
 
Fullstack End-to-end test automation with Node.js, one year later
Fullstack End-to-end test automation with Node.js, one year laterFullstack End-to-end test automation with Node.js, one year later
Fullstack End-to-end test automation with Node.js, one year laterMek Srunyu Stittri
 
Making views - DrupalGov Canberra 2017
Making views - DrupalGov Canberra 2017Making views - DrupalGov Canberra 2017
Making views - DrupalGov Canberra 2017Donna Benjamin
 
Getting By Without "QA"
Getting By Without "QA"Getting By Without "QA"
Getting By Without "QA"Dave King
 
Nightwatch at Tilt
Nightwatch at TiltNightwatch at Tilt
Nightwatch at TiltDave King
 

Destacado (10)

DrupalGov 2017: Testing any day: guide to end to end test driven Drupal projects
DrupalGov 2017: Testing any day: guide to end to end test driven Drupal projectsDrupalGov 2017: Testing any day: guide to end to end test driven Drupal projects
DrupalGov 2017: Testing any day: guide to end to end test driven Drupal projects
 
Anointing to excel
Anointing to excelAnointing to excel
Anointing to excel
 
Testing nightwatch, by David Torroija
Testing nightwatch, by David TorroijaTesting nightwatch, by David Torroija
Testing nightwatch, by David Torroija
 
The Javascript Toolkit 2.0
The Javascript Toolkit 2.0The Javascript Toolkit 2.0
The Javascript Toolkit 2.0
 
Evolving legacy to microservices and ddd
Evolving legacy to microservices and dddEvolving legacy to microservices and ddd
Evolving legacy to microservices and ddd
 
Browser Automated Testing Frameworks - Nightwatch.js
Browser Automated Testing Frameworks - Nightwatch.jsBrowser Automated Testing Frameworks - Nightwatch.js
Browser Automated Testing Frameworks - Nightwatch.js
 
Fullstack End-to-end test automation with Node.js, one year later
Fullstack End-to-end test automation with Node.js, one year laterFullstack End-to-end test automation with Node.js, one year later
Fullstack End-to-end test automation with Node.js, one year later
 
Making views - DrupalGov Canberra 2017
Making views - DrupalGov Canberra 2017Making views - DrupalGov Canberra 2017
Making views - DrupalGov Canberra 2017
 
Getting By Without "QA"
Getting By Without "QA"Getting By Without "QA"
Getting By Without "QA"
 
Nightwatch at Tilt
Nightwatch at TiltNightwatch at Tilt
Nightwatch at Tilt
 

Similar a DrupalCon Dublin 2016 - Automated browser testing with Nightwatch.js

Android UI Testing with Appium
Android UI Testing with AppiumAndroid UI Testing with Appium
Android UI Testing with AppiumLuke Maung
 
UA Testing with Selenium and PHPUnit - ZendCon 2013
UA Testing with Selenium and PHPUnit - ZendCon 2013UA Testing with Selenium and PHPUnit - ZendCon 2013
UA Testing with Selenium and PHPUnit - ZendCon 2013Michelangelo van Dam
 
Protractor framework architecture with example
Protractor framework architecture with exampleProtractor framework architecture with example
Protractor framework architecture with exampleshadabgilani
 
Good practices for debugging Selenium and Appium tests
Good practices for debugging Selenium and Appium testsGood practices for debugging Selenium and Appium tests
Good practices for debugging Selenium and Appium testsAbhijeet Vaikar
 
Dive into Play Framework
Dive into Play FrameworkDive into Play Framework
Dive into Play FrameworkMaher Gamal
 
Testing in JavaScript - August 2018 - WebElement Bardejov
Testing in JavaScript - August 2018 - WebElement BardejovTesting in JavaScript - August 2018 - WebElement Bardejov
Testing in JavaScript - August 2018 - WebElement BardejovMarian Rusnak
 
soft-shake.ch - Hands on Node.js
soft-shake.ch - Hands on Node.jssoft-shake.ch - Hands on Node.js
soft-shake.ch - Hands on Node.jssoft-shake.ch
 
Detecting headless browsers
Detecting headless browsersDetecting headless browsers
Detecting headless browsersSergey Shekyan
 
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
 
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_)
 
Good karma: UX Patterns and Unit Testing in Angular with Karma
Good karma: UX Patterns and Unit Testing in Angular with KarmaGood karma: UX Patterns and Unit Testing in Angular with Karma
Good karma: UX Patterns and Unit Testing in Angular with KarmaExoLeaders.com
 
Laravel5 Introduction and essentials
Laravel5 Introduction and essentialsLaravel5 Introduction and essentials
Laravel5 Introduction and essentialsPramod Kadam
 
Top100summit 谷歌-scott-improve your automated web application testing
Top100summit  谷歌-scott-improve your automated web application testingTop100summit  谷歌-scott-improve your automated web application testing
Top100summit 谷歌-scott-improve your automated web application testingdrewz lin
 
Testing web application with Python
Testing web application with PythonTesting web application with Python
Testing web application with PythonJachym Cepicky
 

Similar a DrupalCon Dublin 2016 - Automated browser testing with Nightwatch.js (20)

Android UI Testing with Appium
Android UI Testing with AppiumAndroid UI Testing with Appium
Android UI Testing with Appium
 
Testing in JavaScript
Testing in JavaScriptTesting in JavaScript
Testing in JavaScript
 
UA Testing with Selenium and PHPUnit - ZendCon 2013
UA Testing with Selenium and PHPUnit - ZendCon 2013UA Testing with Selenium and PHPUnit - ZendCon 2013
UA Testing with Selenium and PHPUnit - ZendCon 2013
 
Selenium
SeleniumSelenium
Selenium
 
Protractor framework architecture with example
Protractor framework architecture with exampleProtractor framework architecture with example
Protractor framework architecture with example
 
Good practices for debugging Selenium and Appium tests
Good practices for debugging Selenium and Appium testsGood practices for debugging Selenium and Appium tests
Good practices for debugging Selenium and Appium tests
 
Dive into Play Framework
Dive into Play FrameworkDive into Play Framework
Dive into Play Framework
 
Testing in JavaScript - August 2018 - WebElement Bardejov
Testing in JavaScript - August 2018 - WebElement BardejovTesting in JavaScript - August 2018 - WebElement Bardejov
Testing in JavaScript - August 2018 - WebElement Bardejov
 
Webdriver.io
Webdriver.io Webdriver.io
Webdriver.io
 
End-to-end testing with geb
End-to-end testing with gebEnd-to-end testing with geb
End-to-end testing with geb
 
soft-shake.ch - Hands on Node.js
soft-shake.ch - Hands on Node.jssoft-shake.ch - Hands on Node.js
soft-shake.ch - Hands on Node.js
 
Detecting headless browsers
Detecting headless browsersDetecting headless browsers
Detecting headless browsers
 
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)
 
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
 
Good karma: UX Patterns and Unit Testing in Angular with Karma
Good karma: UX Patterns and Unit Testing in Angular with KarmaGood karma: UX Patterns and Unit Testing in Angular with Karma
Good karma: UX Patterns and Unit Testing in Angular with Karma
 
Laravel5 Introduction and essentials
Laravel5 Introduction and essentialsLaravel5 Introduction and essentials
Laravel5 Introduction and essentials
 
Top100summit 谷歌-scott-improve your automated web application testing
Top100summit  谷歌-scott-improve your automated web application testingTop100summit  谷歌-scott-improve your automated web application testing
Top100summit 谷歌-scott-improve your automated web application testing
 
Testing web application with Python
Testing web application with PythonTesting web application with Python
Testing web application with Python
 
Nicolas Embleton, Advanced Angular JS
Nicolas Embleton, Advanced Angular JSNicolas Embleton, Advanced Angular JS
Nicolas Embleton, Advanced Angular JS
 
Introduction to angular js
Introduction to angular jsIntroduction to angular js
Introduction to angular js
 

Más de Vladimir Roudakov

What's new in Drupal 8.7 (Brisbane Drupal Meetup Brisbane)
What's new in Drupal 8.7 (Brisbane Drupal Meetup Brisbane)What's new in Drupal 8.7 (Brisbane Drupal Meetup Brisbane)
What's new in Drupal 8.7 (Brisbane Drupal Meetup Brisbane)Vladimir Roudakov
 
Gitlab for JS developers (BrisJs meetup, 2019-Apr-01)
Gitlab for JS developers (BrisJs meetup, 2019-Apr-01)Gitlab for JS developers (BrisJs meetup, 2019-Apr-01)
Gitlab for JS developers (BrisJs meetup, 2019-Apr-01)Vladimir Roudakov
 
Gitlab for PHP developers (Brisbane PHP meetup, 2019-Jan-29)
Gitlab for PHP developers (Brisbane PHP meetup, 2019-Jan-29)Gitlab for PHP developers (Brisbane PHP meetup, 2019-Jan-29)
Gitlab for PHP developers (Brisbane PHP meetup, 2019-Jan-29)Vladimir Roudakov
 
Bootstrap 4: what's new, using in Drupal, Bootstrap and php, Bootstrap tools
Bootstrap 4: what's new, using in Drupal, Bootstrap and php, Bootstrap toolsBootstrap 4: what's new, using in Drupal, Bootstrap and php, Bootstrap tools
Bootstrap 4: what's new, using in Drupal, Bootstrap and php, Bootstrap toolsVladimir Roudakov
 
Drupal Brisbane Meetup :: Drupal in late 2017-2018
Drupal Brisbane Meetup :: Drupal in late 2017-2018Drupal Brisbane Meetup :: Drupal in late 2017-2018
Drupal Brisbane Meetup :: Drupal in late 2017-2018Vladimir Roudakov
 
10 tips for continuous integration
10 tips for continuous integration10 tips for continuous integration
10 tips for continuous integrationVladimir Roudakov
 
Testing any day: guide to end to end test driven WordPress projects
Testing any day: guide to end to end test driven WordPress projectsTesting any day: guide to end to end test driven WordPress projects
Testing any day: guide to end to end test driven WordPress projectsVladimir Roudakov
 
Brisbane Drupal meetup 2016 Apr - whats new in Drupal 8.1
Brisbane Drupal meetup   2016 Apr - whats new in Drupal 8.1Brisbane Drupal meetup   2016 Apr - whats new in Drupal 8.1
Brisbane Drupal meetup 2016 Apr - whats new in Drupal 8.1Vladimir Roudakov
 
Brisbane Drupal meetup - 2016 Mar - Build module in Drupal 8
Brisbane Drupal meetup - 2016 Mar - Build module in Drupal 8Brisbane Drupal meetup - 2016 Mar - Build module in Drupal 8
Brisbane Drupal meetup - 2016 Mar - Build module in Drupal 8Vladimir Roudakov
 
Brisbane Drupal meetup - 2016 Jan - Drupal hostings
Brisbane Drupal meetup - 2016 Jan - Drupal hostingsBrisbane Drupal meetup - 2016 Jan - Drupal hostings
Brisbane Drupal meetup - 2016 Jan - Drupal hostingsVladimir Roudakov
 
Bootstrap. December 2015 [Brisbane Drupal meetup]
Bootstrap. December 2015 [Brisbane Drupal meetup] Bootstrap. December 2015 [Brisbane Drupal meetup]
Bootstrap. December 2015 [Brisbane Drupal meetup] Vladimir Roudakov
 
DrupalCamp Melbourne 2015. Bootstrap: framework and theme.
DrupalCamp Melbourne 2015. Bootstrap: framework and theme.DrupalCamp Melbourne 2015. Bootstrap: framework and theme.
DrupalCamp Melbourne 2015. Bootstrap: framework and theme.Vladimir Roudakov
 
Drupal 8 update. November 2015 [Brisbane Drupal meetup]
Drupal 8 update. November 2015 [Brisbane Drupal meetup]Drupal 8 update. November 2015 [Brisbane Drupal meetup]
Drupal 8 update. November 2015 [Brisbane Drupal meetup]Vladimir Roudakov
 
Drupal 8 update. June 2015 [Brisbane Drupal meetup]
Drupal 8 update. June 2015 [Brisbane Drupal meetup]Drupal 8 update. June 2015 [Brisbane Drupal meetup]
Drupal 8 update. June 2015 [Brisbane Drupal meetup]Vladimir Roudakov
 
Drupal 8 update. May 2015 [Brisbane Drupal meetup]
Drupal 8 update. May 2015 [Brisbane Drupal meetup]Drupal 8 update. May 2015 [Brisbane Drupal meetup]
Drupal 8 update. May 2015 [Brisbane Drupal meetup]Vladimir Roudakov
 
Drupal 8 update. March 2015 [Brisbane Drupal meetup]
Drupal 8 update. March 2015 [Brisbane Drupal meetup]Drupal 8 update. March 2015 [Brisbane Drupal meetup]
Drupal 8 update. March 2015 [Brisbane Drupal meetup]Vladimir Roudakov
 
Drupal 8 update. November 2015 [Brisbane Drupal meetup]
Drupal 8 update. November 2015 [Brisbane Drupal meetup]Drupal 8 update. November 2015 [Brisbane Drupal meetup]
Drupal 8 update. November 2015 [Brisbane Drupal meetup]Vladimir Roudakov
 
Drupal LMS. February 2015 [Brisbane Drupal meetup]
Drupal LMS. February 2015 [Brisbane Drupal meetup]Drupal LMS. February 2015 [Brisbane Drupal meetup]
Drupal LMS. February 2015 [Brisbane Drupal meetup]Vladimir Roudakov
 
Drupal 8 update. February 2015 [Brisbane Drupal meetup]
Drupal 8 update. February 2015 [Brisbane Drupal meetup]Drupal 8 update. February 2015 [Brisbane Drupal meetup]
Drupal 8 update. February 2015 [Brisbane Drupal meetup]Vladimir Roudakov
 
Drupal 8 update & drush: October 2014
Drupal 8 update & drush: October 2014Drupal 8 update & drush: October 2014
Drupal 8 update & drush: October 2014Vladimir Roudakov
 

Más de Vladimir Roudakov (20)

What's new in Drupal 8.7 (Brisbane Drupal Meetup Brisbane)
What's new in Drupal 8.7 (Brisbane Drupal Meetup Brisbane)What's new in Drupal 8.7 (Brisbane Drupal Meetup Brisbane)
What's new in Drupal 8.7 (Brisbane Drupal Meetup Brisbane)
 
Gitlab for JS developers (BrisJs meetup, 2019-Apr-01)
Gitlab for JS developers (BrisJs meetup, 2019-Apr-01)Gitlab for JS developers (BrisJs meetup, 2019-Apr-01)
Gitlab for JS developers (BrisJs meetup, 2019-Apr-01)
 
Gitlab for PHP developers (Brisbane PHP meetup, 2019-Jan-29)
Gitlab for PHP developers (Brisbane PHP meetup, 2019-Jan-29)Gitlab for PHP developers (Brisbane PHP meetup, 2019-Jan-29)
Gitlab for PHP developers (Brisbane PHP meetup, 2019-Jan-29)
 
Bootstrap 4: what's new, using in Drupal, Bootstrap and php, Bootstrap tools
Bootstrap 4: what's new, using in Drupal, Bootstrap and php, Bootstrap toolsBootstrap 4: what's new, using in Drupal, Bootstrap and php, Bootstrap tools
Bootstrap 4: what's new, using in Drupal, Bootstrap and php, Bootstrap tools
 
Drupal Brisbane Meetup :: Drupal in late 2017-2018
Drupal Brisbane Meetup :: Drupal in late 2017-2018Drupal Brisbane Meetup :: Drupal in late 2017-2018
Drupal Brisbane Meetup :: Drupal in late 2017-2018
 
10 tips for continuous integration
10 tips for continuous integration10 tips for continuous integration
10 tips for continuous integration
 
Testing any day: guide to end to end test driven WordPress projects
Testing any day: guide to end to end test driven WordPress projectsTesting any day: guide to end to end test driven WordPress projects
Testing any day: guide to end to end test driven WordPress projects
 
Brisbane Drupal meetup 2016 Apr - whats new in Drupal 8.1
Brisbane Drupal meetup   2016 Apr - whats new in Drupal 8.1Brisbane Drupal meetup   2016 Apr - whats new in Drupal 8.1
Brisbane Drupal meetup 2016 Apr - whats new in Drupal 8.1
 
Brisbane Drupal meetup - 2016 Mar - Build module in Drupal 8
Brisbane Drupal meetup - 2016 Mar - Build module in Drupal 8Brisbane Drupal meetup - 2016 Mar - Build module in Drupal 8
Brisbane Drupal meetup - 2016 Mar - Build module in Drupal 8
 
Brisbane Drupal meetup - 2016 Jan - Drupal hostings
Brisbane Drupal meetup - 2016 Jan - Drupal hostingsBrisbane Drupal meetup - 2016 Jan - Drupal hostings
Brisbane Drupal meetup - 2016 Jan - Drupal hostings
 
Bootstrap. December 2015 [Brisbane Drupal meetup]
Bootstrap. December 2015 [Brisbane Drupal meetup] Bootstrap. December 2015 [Brisbane Drupal meetup]
Bootstrap. December 2015 [Brisbane Drupal meetup]
 
DrupalCamp Melbourne 2015. Bootstrap: framework and theme.
DrupalCamp Melbourne 2015. Bootstrap: framework and theme.DrupalCamp Melbourne 2015. Bootstrap: framework and theme.
DrupalCamp Melbourne 2015. Bootstrap: framework and theme.
 
Drupal 8 update. November 2015 [Brisbane Drupal meetup]
Drupal 8 update. November 2015 [Brisbane Drupal meetup]Drupal 8 update. November 2015 [Brisbane Drupal meetup]
Drupal 8 update. November 2015 [Brisbane Drupal meetup]
 
Drupal 8 update. June 2015 [Brisbane Drupal meetup]
Drupal 8 update. June 2015 [Brisbane Drupal meetup]Drupal 8 update. June 2015 [Brisbane Drupal meetup]
Drupal 8 update. June 2015 [Brisbane Drupal meetup]
 
Drupal 8 update. May 2015 [Brisbane Drupal meetup]
Drupal 8 update. May 2015 [Brisbane Drupal meetup]Drupal 8 update. May 2015 [Brisbane Drupal meetup]
Drupal 8 update. May 2015 [Brisbane Drupal meetup]
 
Drupal 8 update. March 2015 [Brisbane Drupal meetup]
Drupal 8 update. March 2015 [Brisbane Drupal meetup]Drupal 8 update. March 2015 [Brisbane Drupal meetup]
Drupal 8 update. March 2015 [Brisbane Drupal meetup]
 
Drupal 8 update. November 2015 [Brisbane Drupal meetup]
Drupal 8 update. November 2015 [Brisbane Drupal meetup]Drupal 8 update. November 2015 [Brisbane Drupal meetup]
Drupal 8 update. November 2015 [Brisbane Drupal meetup]
 
Drupal LMS. February 2015 [Brisbane Drupal meetup]
Drupal LMS. February 2015 [Brisbane Drupal meetup]Drupal LMS. February 2015 [Brisbane Drupal meetup]
Drupal LMS. February 2015 [Brisbane Drupal meetup]
 
Drupal 8 update. February 2015 [Brisbane Drupal meetup]
Drupal 8 update. February 2015 [Brisbane Drupal meetup]Drupal 8 update. February 2015 [Brisbane Drupal meetup]
Drupal 8 update. February 2015 [Brisbane Drupal meetup]
 
Drupal 8 update & drush: October 2014
Drupal 8 update & drush: October 2014Drupal 8 update & drush: October 2014
Drupal 8 update & drush: October 2014
 

Último

The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 

Último (20)

The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 

DrupalCon Dublin 2016 - Automated browser testing with Nightwatch.js