SlideShare a Scribd company logo
JAVASCRIPT-QA-TOOLS




Tuesday, October 16, 12
Tuesday, October 16, 12
WER BIN ICH?


    • Sebastian           Springer

    • 29

    • Dipl. Inf. (FH)

    • Teamleiter           @ Mayflower



Tuesday, October 16, 12
WAS ERZÄHLE ICH HEUTE?


    • Was            bringt mir eine hohe Qualität überhaupt?

    • Welche Tools           kann ich nutzen?

    • Wie            kann ich die QA automatisieren?




Tuesday, October 16, 12
LET’S GO




Tuesday, October 16, 12
WARUM
                    QUALITÄTSSICHERUNG?



Tuesday, October 16, 12
JAVASCRIPT === QUICK & DIRTY




Tuesday, October 16, 12
JAVASCRIPT === QUICK & DIRTY


    • Leichtgewichtig

    • Schnelle              Ergebnisse

    • Direkt              in HTML eingebettet

    • (Fast)              überall verfügbar



Tuesday, October 16, 12
langfristig

JAVASCRIPT === QUICK & DIRTY




Tuesday, October 16, 12
UND WAS IST JETZT
                             QUALITÄT?



Tuesday, October 16, 12
WAS IST QUALITÄT?

    • Reliability

    • Efficiency

    • Security

    • Maintainability

    • Size



Tuesday, October 16, 12
8                 Qualitätssicherung als
                kontinuierlicher Prozess

Tuesday, October 16, 12
Continuous Inspection



Tuesday, October 16, 12
Continuous Integration



Tuesday, October 16, 12
QA IM KLEINEN - DIE IDE




Tuesday, October 16, 12
IDE - EINSTELLUNGEN




Tuesday, October 16, 12
QA IM GROßEN - JENKINS




Tuesday, October 16, 12
JENKINS - KONFIGURATION


    • Build Targets           mit Apache Ant

    • Build.xml

    • Build           Steps

    • Visualisierung          über Plugins



Tuesday, October 16, 12
JENKINS KONFIGURATION




Tuesday, October 16, 12
JENKINS - KONFIGURATION


    • Projektkonfiguration
        /var/lib/jenkins/jobs/<Projekt>/config.xml

    • Ant-Konfiguration
        /var/lib/jenkins/jobs/<Projekt>/workspace/build.xml




Tuesday, October 16, 12
UND WOZU DAS GANZE?




Tuesday, October 16, 12
Schnelle Rückmeldung



Tuesday, October 16, 12
BEISPIEL: DATE CALC




Tuesday, October 16, 12
BEISPIEL: DATE CALC




Tuesday, October 16, 12
BEISPIEL: DATE CALC
                                         Datum eingeben




Tuesday, October 16, 12
BEISPIEL: DATE CALC
                                         Offfset eingeben




Tuesday, October 16, 12
BEISPIEL: DATE CALC




                                       Datum berechnen
                                            lassen


Tuesday, October 16, 12
BEISPIEL: DATE CALC


                              Feiertage beachten!




Tuesday, October 16, 12
CODE-ANFORDERUNGEN


    • JSLinted

    • Kein           Copy/Paste Code

    • Unittests

    • Akzeptanztests




Tuesday, October 16, 12
WIE?




Tuesday, October 16, 12
Toolunterstützung &
                            Automatisierung


Tuesday, October 16, 12
CODE-ANFORDERUNGEN


    • JSLinted

    • Kein           Copy/Paste Code

    • Unittests

    • Akzeptanztests




Tuesday, October 16, 12
JSLINT




Tuesday, October 16, 12
JSLINT?
                          ANYONE?



Tuesday, October 16, 12
IT WILL HURT YOUR FEELINGS




Tuesday, October 16, 12
WAS TUT JSLINT?
    • Codingstyle               - Whitespaces

    • ==          und != vs. === und !==

    • Variablendeklaration              zu Beginn einer Funktion

    • “use           strict”

    • Keine               Globale Variablen

    • Definition               vor Verwendung

    • eval          is EVIL
Tuesday, October 16, 12
JSLINT IN DER IDE




Tuesday, October 16, 12
JSLINT IN JENKINS
<target name="jslint">
    <apply executable="java" output="${basedir}/build/
                                      jslint/jslint.xml">
        <arg value="-jar" />
        <arg value="/opt/jslint4java/jslint4java.jar" />
        <arg value="--report" />
        <arg value="xml" />
        <fileset dir="${basedir}/source">
             <patternset>
                 <include name="**/*.js" />
             </patternset>
        </fileset>
    </apply>
</target>

Tuesday, October 16, 12
JSLINT IN JENKINS



    • Plugin: Violations        Plugin

    • Post-build          action: Report Violations




Tuesday, October 16, 12
CODE-ANFORDERUNGEN


    • JSLinted

    • Kein           Copy/Paste Code

    • Unittests

    • Akzeptanztests




Tuesday, October 16, 12
COPY AND PASTE
                            DETECTION



Tuesday, October 16, 12
WAS MACHT CPD?



    • Duplikate             im Quellcode finden

    • Tokens              statt Strings




Tuesday, October 16, 12
WARUM CPD?


    • Verbesserungen             an mehreren Stellen

    • Bugfixes             an mehreren Stellen




Tuesday, October 16, 12
WARUM CPD?


    • Verbesserungen             an mehreren Stellen

    • Bugfixes             an mehreren Stellen




                  = erhöhter Wartungsaufwand
Tuesday, October 16, 12
CPD IN DER IDE




Tuesday, October 16, 12
CPD IN DER IDE




Tuesday, October 16, 12
CPD IN JENKINS
  <target name="jscpd">
      <exec executable="/opt/PMD/pmd-bin-5.0.0/bin/run.sh">
          <arg value="cpd" />
          <arg value="--minimum-tokens" />
          <arg value="5" />
          <arg value="--files" />
          <arg value="source" />
          <arg value="--language" />
          <arg value="ecmascript" />
          <arg value="--format" />
          <arg value="xmls" />
          <arg value="build/jscpd/jscpd.xml" />
      </exec>
  </target>


Tuesday, October 16, 12
CPD IN JENKINS



    • Plugin: Duplicate         Code Scanner Plug-in

    • Post-build          action: Publish duplicate code analysis results




Tuesday, October 16, 12
CPD IN JENKINS



    • Plugin: Violations        Plugin

    • Post-build          action: Report Violations




Tuesday, October 16, 12
CODE-ANFORDERUNGEN


    • JSLinted

    • Kein           Copy/Paste Code

    • Unittests

    • Akzeptanztests




Tuesday, October 16, 12
UNITTESTS




Tuesday, October 16, 12
WARUM UNITTESTS?


    • Stabilität

    • Sicherheit          für Developer

    • Dokumentation

    • Pro          Bug ein Test



Tuesday, October 16, 12
JASMINE

         describe("DateCalc", function () {
             it("should return...", function () {
                 var dateCalc = new DateCalc(),
                        result = dateCalc.resolveDate();
                    expect(result).toBeFalsy();
             });
         });




Tuesday, October 16, 12
JSTESTDRIVER


    • Testing             Framework

    • Browser              Capturing

    • Coverage

    • Plugins             für andere Frameworks (qUnit, Jasmine, etc.)



Tuesday, October 16, 12
JASMINE IN JENKINS
                          java -jar JsTestDriver.jar --port 9876




Tuesday, October 16, 12
JASMINE IN JENKINS
       <target name="jasmine">
         <exec executable="java">
           <arg value="-jar" />
           <arg value="/opt/jstestdriver/
       JsTestDriver-1.3.5.jar" />
           <arg value="--config" />
           <arg value="${basedir}/source/
       DateCalcJenkins.jstd" />
           <arg value="--tests" />
           <arg value="all" />
           <arg value="--testOutput" />
           <arg value="${basedir}/build/jstestdriver" />
         </exec>
       </target>

Tuesday, October 16, 12
JASMINE IN JENKINS



    • Plugin: xUnit         Plugin

    • Post-build          action: Publish xUnit test result report




Tuesday, October 16, 12
COVERAGE



    • Voraussetzung       #1: JsTestDriver Coverage Plugin

    • Voraussetzung       #2: Lcov to Cobertura Converter




Tuesday, October 16, 12
COVERAGE

<target name="coverage">
  <exec executable="/opt/jstestdriver/lcov_cobertura.py">
    <arg value="${basedir}/build/jstestdriver/
                jsTestDriver.conf-coverage.dat" />
    <arg value="-o" />
    <arg value="${basedir}/build/jstestdriver/coverage.xml" /
  </exec>
</target>




Tuesday, October 16, 12
COVERAGE



    • Plugin: Cobertura          Plugin

    • Post-build          action: Publish Cobertura Coverage Report




Tuesday, October 16, 12
CONFIG.JSTD
server: http://localhost:9876

load:
  - lib/jasmine-1.2.0.rc3/jasmine.js
  - lib/jasmine-jstd-adapter/src/JasmineAdapter.js
  - spec/DateCalc.js
  - spec/Holiday.js
  - src/DateCalc.js
  - src/Holiday.js

plugin:
 - name: "coverage"
   jar: "/opt/JsTestDriver/plugins/coverage.jar"
   module: "com.google.jstestdriver.coverage.CoverageM

Tuesday, October 16, 12
JASMINE IN DER IDE




Tuesday, October 16, 12
JASMINE IN DER IDE




Tuesday, October 16, 12
JASMINE IN DER IDE




Tuesday, October 16, 12
CODE-ANFORDERUNGEN


    • JSLinted

    • Kein           Copy/Paste Code

    • Unittests

    • Akzeptanztests




Tuesday, October 16, 12
AKZEPTANZTESTS




Tuesday, October 16, 12
WARUM AKZEPTANZTESTS?


    • Tests               gegen Akzeptanzkriterien

    • Anforderungen                vs. Umsetzung

    • Nicht               von Entwicklern




Tuesday, October 16, 12
SELENIUM IDE




Tuesday, October 16, 12
SELENIUM IN JENKINS
<target name=”selenium”>
  <exec executable=”java” output=”${basedir}/build/
selenium/results.html>
    <arg value=”-jar” />
    <arg value=”/opt/selenium/selenium-server.jar” />
    <arg value=”-htmlSuite” />
    <arg value=”*firefox” />
    <arg value=”http://datecalc.basti.dev” />
    <arg value=”/srv/www/vhosts/datecalc/tests/
suite.html” />
  </exec>
</target>



Tuesday, October 16, 12
SELENIUM IN JENKINS



    • Plugin: Selenium          HTML report Plugin

    • Post-build           action: Publish Selenium HTML Report




Tuesday, October 16, 12
CHUCK NORRIS PLUGIN




Tuesday, October 16, 12
FRAGEN?




Tuesday, October 16, 12
KONTAKT
                          Sebastian Springer
                          sebastian.springer@mayflower.de

                          Mayflower GmbH
                          Mannhardtstr. 6
                          80538 München
                          Deutschland

                          @basti_springer

                          https://github.com/sspringer82



Tuesday, October 16, 12

More Related Content

What's hot

Enterprise javascriptsession1
Enterprise javascriptsession1Enterprise javascriptsession1
Enterprise javascriptsession1Troy Miles
 
Maintaining Your Tests At Scale
Maintaining Your Tests At ScaleMaintaining Your Tests At Scale
Maintaining Your Tests At Scale
Trent Willis
 
How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016
How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016
How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016
Gavin Pickin
 
Scala.js & friends: SCALA ALL THE THINGS
Scala.js & friends: SCALA ALL THE THINGSScala.js & friends: SCALA ALL THE THINGS
Scala.js & friends: SCALA ALL THE THINGS
Chris Birchall
 
Ajax Tutorial
Ajax TutorialAjax Tutorial
Ajax Tutorialoscon2007
 
Monitoring Big Data Systems Done "The Simple Way" - Codemotion Milan 2017 - D...
Monitoring Big Data Systems Done "The Simple Way" - Codemotion Milan 2017 - D...Monitoring Big Data Systems Done "The Simple Way" - Codemotion Milan 2017 - D...
Monitoring Big Data Systems Done "The Simple Way" - Codemotion Milan 2017 - D...
Demi Ben-Ari
 
Building a JavaScript Library
Building a JavaScript LibraryBuilding a JavaScript Library
Building a JavaScript Library
jeresig
 
Implementing quality in Java projects
Implementing quality in Java projectsImplementing quality in Java projects
Implementing quality in Java projects
Vincent Massol
 

What's hot (8)

Enterprise javascriptsession1
Enterprise javascriptsession1Enterprise javascriptsession1
Enterprise javascriptsession1
 
Maintaining Your Tests At Scale
Maintaining Your Tests At ScaleMaintaining Your Tests At Scale
Maintaining Your Tests At Scale
 
How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016
How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016
How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016
 
Scala.js & friends: SCALA ALL THE THINGS
Scala.js & friends: SCALA ALL THE THINGSScala.js & friends: SCALA ALL THE THINGS
Scala.js & friends: SCALA ALL THE THINGS
 
Ajax Tutorial
Ajax TutorialAjax Tutorial
Ajax Tutorial
 
Monitoring Big Data Systems Done "The Simple Way" - Codemotion Milan 2017 - D...
Monitoring Big Data Systems Done "The Simple Way" - Codemotion Milan 2017 - D...Monitoring Big Data Systems Done "The Simple Way" - Codemotion Milan 2017 - D...
Monitoring Big Data Systems Done "The Simple Way" - Codemotion Milan 2017 - D...
 
Building a JavaScript Library
Building a JavaScript LibraryBuilding a JavaScript Library
Building a JavaScript Library
 
Implementing quality in Java projects
Implementing quality in Java projectsImplementing quality in Java projects
Implementing quality in Java projects
 

Viewers also liked

Open Educational Resources in Higher education
Open Educational Resources in Higher education Open Educational Resources in Higher education
Open Educational Resources in Higher education
Ulf-Daniel Ehlers
 
Kommunikations-APIs von JavaScript (International PHP Conference/WebTechCon 2...
Kommunikations-APIs von JavaScript (International PHP Conference/WebTechCon 2...Kommunikations-APIs von JavaScript (International PHP Conference/WebTechCon 2...
Kommunikations-APIs von JavaScript (International PHP Conference/WebTechCon 2...
Christian Wenz
 
Beschleunigung via Twitter (Input)
Beschleunigung via Twitter (Input)Beschleunigung via Twitter (Input)
Beschleunigung via Twitter (Input)
Tine Nowak
 
Qualität von MOOCs
Qualität von MOOCsQualität von MOOCs
Qualität von MOOCs
Ulf-Daniel Ehlers
 
Qualität von MOOCs - Folien zum GMW Workshop mit Rolf Schulmeister, Claudia B...
Qualität von MOOCs - Folien zum GMW Workshop mit Rolf Schulmeister, Claudia B...Qualität von MOOCs - Folien zum GMW Workshop mit Rolf Schulmeister, Claudia B...
Qualität von MOOCs - Folien zum GMW Workshop mit Rolf Schulmeister, Claudia B...
Ulf-Daniel Ehlers
 
Quaity of MOOCs - Results of "The MOOC Quality Project"
Quaity of MOOCs - Results of "The MOOC Quality Project"Quaity of MOOCs - Results of "The MOOC Quality Project"
Quaity of MOOCs - Results of "The MOOC Quality Project"
Ulf-Daniel Ehlers
 
Weblogs im Museum
Weblogs im MuseumWeblogs im Museum
Weblogs im MuseumTine Nowak
 
E-Learning im Museum
E-Learning im MuseumE-Learning im Museum
E-Learning im Museum
Tine Nowak
 

Viewers also liked (8)

Open Educational Resources in Higher education
Open Educational Resources in Higher education Open Educational Resources in Higher education
Open Educational Resources in Higher education
 
Kommunikations-APIs von JavaScript (International PHP Conference/WebTechCon 2...
Kommunikations-APIs von JavaScript (International PHP Conference/WebTechCon 2...Kommunikations-APIs von JavaScript (International PHP Conference/WebTechCon 2...
Kommunikations-APIs von JavaScript (International PHP Conference/WebTechCon 2...
 
Beschleunigung via Twitter (Input)
Beschleunigung via Twitter (Input)Beschleunigung via Twitter (Input)
Beschleunigung via Twitter (Input)
 
Qualität von MOOCs
Qualität von MOOCsQualität von MOOCs
Qualität von MOOCs
 
Qualität von MOOCs - Folien zum GMW Workshop mit Rolf Schulmeister, Claudia B...
Qualität von MOOCs - Folien zum GMW Workshop mit Rolf Schulmeister, Claudia B...Qualität von MOOCs - Folien zum GMW Workshop mit Rolf Schulmeister, Claudia B...
Qualität von MOOCs - Folien zum GMW Workshop mit Rolf Schulmeister, Claudia B...
 
Quaity of MOOCs - Results of "The MOOC Quality Project"
Quaity of MOOCs - Results of "The MOOC Quality Project"Quaity of MOOCs - Results of "The MOOC Quality Project"
Quaity of MOOCs - Results of "The MOOC Quality Project"
 
Weblogs im Museum
Weblogs im MuseumWeblogs im Museum
Weblogs im Museum
 
E-Learning im Museum
E-Learning im MuseumE-Learning im Museum
E-Learning im Museum
 

Similar to JavaScript QA Tools

Continuous Integration for IOS Apps
Continuous Integration for IOS AppsContinuous Integration for IOS Apps
Continuous Integration for IOS Apps
Allan Davis
 
Automated tests workshop
Automated tests workshopAutomated tests workshop
Automated tests workshopdrewz lin
 
Creating Maintainable Automated Acceptance Tests
Creating Maintainable Automated Acceptance TestsCreating Maintainable Automated Acceptance Tests
Creating Maintainable Automated Acceptance Tests
Jez Humble
 
Ruby meetup 7_years_in_testing
Ruby meetup 7_years_in_testingRuby meetup 7_years_in_testing
Ruby meetup 7_years_in_testing
Digital Natives
 
Código Fácil De Testear
Código Fácil De TestearCódigo Fácil De Testear
Código Fácil De Testear
Alvaro Videla
 
How we're building Wercker
How we're building WerckerHow we're building Wercker
How we're building Wercker
Micha Hernandez van Leuffen
 
Intro to PHP Testing
Intro to PHP TestingIntro to PHP Testing
Intro to PHP TestingRan Mizrahi
 
Las maravillas de Google App Engine
Las maravillas de Google App EngineLas maravillas de Google App Engine
Las maravillas de Google App Engine
coto
 
Lessons from 4 years of driver develoment
Lessons from 4 years of driver develomentLessons from 4 years of driver develoment
Lessons from 4 years of driver develoment
christkv
 
Running Lean and Mean: Designing Cost-efficient Architectures on AWS (ARC313)...
Running Lean and Mean: Designing Cost-efficient Architectures on AWS (ARC313)...Running Lean and Mean: Designing Cost-efficient Architectures on AWS (ARC313)...
Running Lean and Mean: Designing Cost-efficient Architectures on AWS (ARC313)...
Amazon Web Services
 
Running Lean and Mean: Designing Cost-efficient Architectures on AWS (ARC313)...
Running Lean and Mean: Designing Cost-efficient Architectures on AWS (ARC313)...Running Lean and Mean: Designing Cost-efficient Architectures on AWS (ARC313)...
Running Lean and Mean: Designing Cost-efficient Architectures on AWS (ARC313)...
Amazon Web Services
 
Using Apache Cassandra: What is this thing, and how do I use it?
Using Apache Cassandra: What is this thing, and how do I use it?Using Apache Cassandra: What is this thing, and how do I use it?
Using Apache Cassandra: What is this thing, and how do I use it?
jeremiahdjordan
 
How to Tame TDD - ISTA 2017
How to Tame TDD - ISTA 2017How to Tame TDD - ISTA 2017
How to Tame TDD - ISTA 2017
Vladik Khononov
 
Backbone.js, Socket.io und Node.js im Einsatz
Backbone.js, Socket.io und Node.js im EinsatzBackbone.js, Socket.io und Node.js im Einsatz
Backbone.js, Socket.io und Node.js im Einsatz
Sebastian Springer
 
Serverless in production, an experience report (IWOMM)
Serverless in production, an experience report (IWOMM)Serverless in production, an experience report (IWOMM)
Serverless in production, an experience report (IWOMM)
Yan Cui
 
Cassandra Meetup: Real-time Analytics using Cassandra, Spark and Shark at Ooyala
Cassandra Meetup: Real-time Analytics using Cassandra, Spark and Shark at OoyalaCassandra Meetup: Real-time Analytics using Cassandra, Spark and Shark at Ooyala
Cassandra Meetup: Real-time Analytics using Cassandra, Spark and Shark at Ooyala
DataStax Academy
 
Grunt understanding
Grunt understandingGrunt understanding
Grunt understanding
Khalid Khan
 
Hadoop: Big Data Stacks validation w/ iTest How to tame the elephant?
Hadoop:  Big Data Stacks validation w/ iTest  How to tame the elephant?Hadoop:  Big Data Stacks validation w/ iTest  How to tame the elephant?
Hadoop: Big Data Stacks validation w/ iTest How to tame the elephant?
Dmitri Shiryaev
 
Everything-as-code – Polyglotte Entwicklung in der Praxis
Everything-as-code – Polyglotte Entwicklung in der PraxisEverything-as-code – Polyglotte Entwicklung in der Praxis
Everything-as-code – Polyglotte Entwicklung in der Praxis
QAware GmbH
 

Similar to JavaScript QA Tools (20)

Continuous Integration for IOS Apps
Continuous Integration for IOS AppsContinuous Integration for IOS Apps
Continuous Integration for IOS Apps
 
Automated tests workshop
Automated tests workshopAutomated tests workshop
Automated tests workshop
 
Creating Maintainable Automated Acceptance Tests
Creating Maintainable Automated Acceptance TestsCreating Maintainable Automated Acceptance Tests
Creating Maintainable Automated Acceptance Tests
 
Ruby meetup 7_years_in_testing
Ruby meetup 7_years_in_testingRuby meetup 7_years_in_testing
Ruby meetup 7_years_in_testing
 
Código Fácil De Testear
Código Fácil De TestearCódigo Fácil De Testear
Código Fácil De Testear
 
How we're building Wercker
How we're building WerckerHow we're building Wercker
How we're building Wercker
 
Intro to PHP Testing
Intro to PHP TestingIntro to PHP Testing
Intro to PHP Testing
 
Las maravillas de Google App Engine
Las maravillas de Google App EngineLas maravillas de Google App Engine
Las maravillas de Google App Engine
 
Lessons from 4 years of driver develoment
Lessons from 4 years of driver develomentLessons from 4 years of driver develoment
Lessons from 4 years of driver develoment
 
Running Lean and Mean: Designing Cost-efficient Architectures on AWS (ARC313)...
Running Lean and Mean: Designing Cost-efficient Architectures on AWS (ARC313)...Running Lean and Mean: Designing Cost-efficient Architectures on AWS (ARC313)...
Running Lean and Mean: Designing Cost-efficient Architectures on AWS (ARC313)...
 
Running Lean and Mean: Designing Cost-efficient Architectures on AWS (ARC313)...
Running Lean and Mean: Designing Cost-efficient Architectures on AWS (ARC313)...Running Lean and Mean: Designing Cost-efficient Architectures on AWS (ARC313)...
Running Lean and Mean: Designing Cost-efficient Architectures on AWS (ARC313)...
 
Using Apache Cassandra: What is this thing, and how do I use it?
Using Apache Cassandra: What is this thing, and how do I use it?Using Apache Cassandra: What is this thing, and how do I use it?
Using Apache Cassandra: What is this thing, and how do I use it?
 
April JavaScript Tools
April JavaScript ToolsApril JavaScript Tools
April JavaScript Tools
 
How to Tame TDD - ISTA 2017
How to Tame TDD - ISTA 2017How to Tame TDD - ISTA 2017
How to Tame TDD - ISTA 2017
 
Backbone.js, Socket.io und Node.js im Einsatz
Backbone.js, Socket.io und Node.js im EinsatzBackbone.js, Socket.io und Node.js im Einsatz
Backbone.js, Socket.io und Node.js im Einsatz
 
Serverless in production, an experience report (IWOMM)
Serverless in production, an experience report (IWOMM)Serverless in production, an experience report (IWOMM)
Serverless in production, an experience report (IWOMM)
 
Cassandra Meetup: Real-time Analytics using Cassandra, Spark and Shark at Ooyala
Cassandra Meetup: Real-time Analytics using Cassandra, Spark and Shark at OoyalaCassandra Meetup: Real-time Analytics using Cassandra, Spark and Shark at Ooyala
Cassandra Meetup: Real-time Analytics using Cassandra, Spark and Shark at Ooyala
 
Grunt understanding
Grunt understandingGrunt understanding
Grunt understanding
 
Hadoop: Big Data Stacks validation w/ iTest How to tame the elephant?
Hadoop:  Big Data Stacks validation w/ iTest  How to tame the elephant?Hadoop:  Big Data Stacks validation w/ iTest  How to tame the elephant?
Hadoop: Big Data Stacks validation w/ iTest How to tame the elephant?
 
Everything-as-code – Polyglotte Entwicklung in der Praxis
Everything-as-code – Polyglotte Entwicklung in der PraxisEverything-as-code – Polyglotte Entwicklung in der Praxis
Everything-as-code – Polyglotte Entwicklung in der Praxis
 

More from Sebastian Springer

HTMX - ist das die nächste Revolution im Web?
HTMX - ist das die nächste Revolution im Web?HTMX - ist das die nächste Revolution im Web?
HTMX - ist das die nächste Revolution im Web?
Sebastian Springer
 
Schnelleinstieg in Angular
Schnelleinstieg in AngularSchnelleinstieg in Angular
Schnelleinstieg in Angular
Sebastian Springer
 
Creating Enterprise Web Applications with Node.js
Creating Enterprise Web Applications with Node.jsCreating Enterprise Web Applications with Node.js
Creating Enterprise Web Applications with Node.js
Sebastian Springer
 
Divide and Conquer – Microservices with Node.js
Divide and Conquer – Microservices with Node.jsDivide and Conquer – Microservices with Node.js
Divide and Conquer – Microservices with Node.js
Sebastian Springer
 
From Zero to Hero – Web Performance
From Zero to Hero – Web PerformanceFrom Zero to Hero – Web Performance
From Zero to Hero – Web Performance
Sebastian Springer
 
Von 0 auf 100 - Performance im Web
Von 0 auf 100 - Performance im WebVon 0 auf 100 - Performance im Web
Von 0 auf 100 - Performance im Web
Sebastian Springer
 
A/B Testing mit Node.js
A/B Testing mit Node.jsA/B Testing mit Node.js
A/B Testing mit Node.js
Sebastian Springer
 
Angular2
Angular2Angular2
Einführung in React
Einführung in ReactEinführung in React
Einführung in React
Sebastian Springer
 
JavaScript Performance
JavaScript PerformanceJavaScript Performance
JavaScript Performance
Sebastian Springer
 
ECMAScript 6 im Produktivbetrieb
ECMAScript 6 im ProduktivbetriebECMAScript 6 im Produktivbetrieb
ECMAScript 6 im Produktivbetrieb
Sebastian Springer
 
Streams in Node.js
Streams in Node.jsStreams in Node.js
Streams in Node.js
Sebastian Springer
 
JavaScript Performance
JavaScript PerformanceJavaScript Performance
JavaScript Performance
Sebastian Springer
 
Große Applikationen mit AngularJS
Große Applikationen mit AngularJSGroße Applikationen mit AngularJS
Große Applikationen mit AngularJS
Sebastian Springer
 
Testing tools
Testing toolsTesting tools
Testing tools
Sebastian Springer
 
Node.js Security
Node.js SecurityNode.js Security
Node.js Security
Sebastian Springer
 
Typescript
TypescriptTypescript
Typescript
Sebastian Springer
 
Reactive Programming
Reactive ProgrammingReactive Programming
Reactive Programming
Sebastian Springer
 
Best Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptBest Practices für TDD in JavaScript
Best Practices für TDD in JavaScript
Sebastian Springer
 
Warum ECMAScript 6 die Welt ein Stückchen besser macht
Warum ECMAScript 6 die Welt ein Stückchen besser machtWarum ECMAScript 6 die Welt ein Stückchen besser macht
Warum ECMAScript 6 die Welt ein Stückchen besser macht
Sebastian Springer
 

More from Sebastian Springer (20)

HTMX - ist das die nächste Revolution im Web?
HTMX - ist das die nächste Revolution im Web?HTMX - ist das die nächste Revolution im Web?
HTMX - ist das die nächste Revolution im Web?
 
Schnelleinstieg in Angular
Schnelleinstieg in AngularSchnelleinstieg in Angular
Schnelleinstieg in Angular
 
Creating Enterprise Web Applications with Node.js
Creating Enterprise Web Applications with Node.jsCreating Enterprise Web Applications with Node.js
Creating Enterprise Web Applications with Node.js
 
Divide and Conquer – Microservices with Node.js
Divide and Conquer – Microservices with Node.jsDivide and Conquer – Microservices with Node.js
Divide and Conquer – Microservices with Node.js
 
From Zero to Hero – Web Performance
From Zero to Hero – Web PerformanceFrom Zero to Hero – Web Performance
From Zero to Hero – Web Performance
 
Von 0 auf 100 - Performance im Web
Von 0 auf 100 - Performance im WebVon 0 auf 100 - Performance im Web
Von 0 auf 100 - Performance im Web
 
A/B Testing mit Node.js
A/B Testing mit Node.jsA/B Testing mit Node.js
A/B Testing mit Node.js
 
Angular2
Angular2Angular2
Angular2
 
Einführung in React
Einführung in ReactEinführung in React
Einführung in React
 
JavaScript Performance
JavaScript PerformanceJavaScript Performance
JavaScript Performance
 
ECMAScript 6 im Produktivbetrieb
ECMAScript 6 im ProduktivbetriebECMAScript 6 im Produktivbetrieb
ECMAScript 6 im Produktivbetrieb
 
Streams in Node.js
Streams in Node.jsStreams in Node.js
Streams in Node.js
 
JavaScript Performance
JavaScript PerformanceJavaScript Performance
JavaScript Performance
 
Große Applikationen mit AngularJS
Große Applikationen mit AngularJSGroße Applikationen mit AngularJS
Große Applikationen mit AngularJS
 
Testing tools
Testing toolsTesting tools
Testing tools
 
Node.js Security
Node.js SecurityNode.js Security
Node.js Security
 
Typescript
TypescriptTypescript
Typescript
 
Reactive Programming
Reactive ProgrammingReactive Programming
Reactive Programming
 
Best Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptBest Practices für TDD in JavaScript
Best Practices für TDD in JavaScript
 
Warum ECMAScript 6 die Welt ein Stückchen besser macht
Warum ECMAScript 6 die Welt ein Stückchen besser machtWarum ECMAScript 6 die Welt ein Stückchen besser macht
Warum ECMAScript 6 die Welt ein Stückchen besser macht
 

Recently uploaded

DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
Kari Kakkonen
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
Pierluigi Pugliese
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
ControlCase
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems S.M.S.A.
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
SOFTTECHHUB
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
Prayukth K V
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Nexer Digital
 
GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...
ThomasParaiso2
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
BookNet Canada
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
Ralf Eggert
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
Adtran
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
James Anderson
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
Neo4j
 

Recently uploaded (20)

DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
 
GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
 

JavaScript QA Tools

  • 3. WER BIN ICH? • Sebastian Springer • 29 • Dipl. Inf. (FH) • Teamleiter @ Mayflower Tuesday, October 16, 12
  • 4. WAS ERZÄHLE ICH HEUTE? • Was bringt mir eine hohe Qualität überhaupt? • Welche Tools kann ich nutzen? • Wie kann ich die QA automatisieren? Tuesday, October 16, 12
  • 6. WARUM QUALITÄTSSICHERUNG? Tuesday, October 16, 12
  • 7. JAVASCRIPT === QUICK & DIRTY Tuesday, October 16, 12
  • 8. JAVASCRIPT === QUICK & DIRTY • Leichtgewichtig • Schnelle Ergebnisse • Direkt in HTML eingebettet • (Fast) überall verfügbar Tuesday, October 16, 12
  • 9. langfristig JAVASCRIPT === QUICK & DIRTY Tuesday, October 16, 12
  • 10. UND WAS IST JETZT QUALITÄT? Tuesday, October 16, 12
  • 11. WAS IST QUALITÄT? • Reliability • Efficiency • Security • Maintainability • Size Tuesday, October 16, 12
  • 12. 8 Qualitätssicherung als kontinuierlicher Prozess Tuesday, October 16, 12
  • 15. QA IM KLEINEN - DIE IDE Tuesday, October 16, 12
  • 17. QA IM GROßEN - JENKINS Tuesday, October 16, 12
  • 18. JENKINS - KONFIGURATION • Build Targets mit Apache Ant • Build.xml • Build Steps • Visualisierung über Plugins Tuesday, October 16, 12
  • 20. JENKINS - KONFIGURATION • Projektkonfiguration /var/lib/jenkins/jobs/<Projekt>/config.xml • Ant-Konfiguration /var/lib/jenkins/jobs/<Projekt>/workspace/build.xml Tuesday, October 16, 12
  • 21. UND WOZU DAS GANZE? Tuesday, October 16, 12
  • 25. BEISPIEL: DATE CALC Datum eingeben Tuesday, October 16, 12
  • 26. BEISPIEL: DATE CALC Offfset eingeben Tuesday, October 16, 12
  • 27. BEISPIEL: DATE CALC Datum berechnen lassen Tuesday, October 16, 12
  • 28. BEISPIEL: DATE CALC Feiertage beachten! Tuesday, October 16, 12
  • 29. CODE-ANFORDERUNGEN • JSLinted • Kein Copy/Paste Code • Unittests • Akzeptanztests Tuesday, October 16, 12
  • 31. Toolunterstützung & Automatisierung Tuesday, October 16, 12
  • 32. CODE-ANFORDERUNGEN • JSLinted • Kein Copy/Paste Code • Unittests • Akzeptanztests Tuesday, October 16, 12
  • 34. JSLINT? ANYONE? Tuesday, October 16, 12
  • 35. IT WILL HURT YOUR FEELINGS Tuesday, October 16, 12
  • 36. WAS TUT JSLINT? • Codingstyle - Whitespaces • == und != vs. === und !== • Variablendeklaration zu Beginn einer Funktion • “use strict” • Keine Globale Variablen • Definition vor Verwendung • eval is EVIL Tuesday, October 16, 12
  • 37. JSLINT IN DER IDE Tuesday, October 16, 12
  • 38. JSLINT IN JENKINS <target name="jslint"> <apply executable="java" output="${basedir}/build/ jslint/jslint.xml"> <arg value="-jar" /> <arg value="/opt/jslint4java/jslint4java.jar" /> <arg value="--report" /> <arg value="xml" /> <fileset dir="${basedir}/source"> <patternset> <include name="**/*.js" /> </patternset> </fileset> </apply> </target> Tuesday, October 16, 12
  • 39. JSLINT IN JENKINS • Plugin: Violations Plugin • Post-build action: Report Violations Tuesday, October 16, 12
  • 40. CODE-ANFORDERUNGEN • JSLinted • Kein Copy/Paste Code • Unittests • Akzeptanztests Tuesday, October 16, 12
  • 41. COPY AND PASTE DETECTION Tuesday, October 16, 12
  • 42. WAS MACHT CPD? • Duplikate im Quellcode finden • Tokens statt Strings Tuesday, October 16, 12
  • 43. WARUM CPD? • Verbesserungen an mehreren Stellen • Bugfixes an mehreren Stellen Tuesday, October 16, 12
  • 44. WARUM CPD? • Verbesserungen an mehreren Stellen • Bugfixes an mehreren Stellen = erhöhter Wartungsaufwand Tuesday, October 16, 12
  • 45. CPD IN DER IDE Tuesday, October 16, 12
  • 46. CPD IN DER IDE Tuesday, October 16, 12
  • 47. CPD IN JENKINS <target name="jscpd"> <exec executable="/opt/PMD/pmd-bin-5.0.0/bin/run.sh"> <arg value="cpd" /> <arg value="--minimum-tokens" /> <arg value="5" /> <arg value="--files" /> <arg value="source" /> <arg value="--language" /> <arg value="ecmascript" /> <arg value="--format" /> <arg value="xmls" /> <arg value="build/jscpd/jscpd.xml" /> </exec> </target> Tuesday, October 16, 12
  • 48. CPD IN JENKINS • Plugin: Duplicate Code Scanner Plug-in • Post-build action: Publish duplicate code analysis results Tuesday, October 16, 12
  • 49. CPD IN JENKINS • Plugin: Violations Plugin • Post-build action: Report Violations Tuesday, October 16, 12
  • 50. CODE-ANFORDERUNGEN • JSLinted • Kein Copy/Paste Code • Unittests • Akzeptanztests Tuesday, October 16, 12
  • 52. WARUM UNITTESTS? • Stabilität • Sicherheit für Developer • Dokumentation • Pro Bug ein Test Tuesday, October 16, 12
  • 53. JASMINE describe("DateCalc", function () { it("should return...", function () { var dateCalc = new DateCalc(), result = dateCalc.resolveDate(); expect(result).toBeFalsy(); }); }); Tuesday, October 16, 12
  • 54. JSTESTDRIVER • Testing Framework • Browser Capturing • Coverage • Plugins für andere Frameworks (qUnit, Jasmine, etc.) Tuesday, October 16, 12
  • 55. JASMINE IN JENKINS java -jar JsTestDriver.jar --port 9876 Tuesday, October 16, 12
  • 56. JASMINE IN JENKINS <target name="jasmine"> <exec executable="java"> <arg value="-jar" /> <arg value="/opt/jstestdriver/ JsTestDriver-1.3.5.jar" /> <arg value="--config" /> <arg value="${basedir}/source/ DateCalcJenkins.jstd" /> <arg value="--tests" /> <arg value="all" /> <arg value="--testOutput" /> <arg value="${basedir}/build/jstestdriver" /> </exec> </target> Tuesday, October 16, 12
  • 57. JASMINE IN JENKINS • Plugin: xUnit Plugin • Post-build action: Publish xUnit test result report Tuesday, October 16, 12
  • 58. COVERAGE • Voraussetzung #1: JsTestDriver Coverage Plugin • Voraussetzung #2: Lcov to Cobertura Converter Tuesday, October 16, 12
  • 59. COVERAGE <target name="coverage"> <exec executable="/opt/jstestdriver/lcov_cobertura.py"> <arg value="${basedir}/build/jstestdriver/ jsTestDriver.conf-coverage.dat" /> <arg value="-o" /> <arg value="${basedir}/build/jstestdriver/coverage.xml" / </exec> </target> Tuesday, October 16, 12
  • 60. COVERAGE • Plugin: Cobertura Plugin • Post-build action: Publish Cobertura Coverage Report Tuesday, October 16, 12
  • 61. CONFIG.JSTD server: http://localhost:9876 load: - lib/jasmine-1.2.0.rc3/jasmine.js - lib/jasmine-jstd-adapter/src/JasmineAdapter.js - spec/DateCalc.js - spec/Holiday.js - src/DateCalc.js - src/Holiday.js plugin: - name: "coverage" jar: "/opt/JsTestDriver/plugins/coverage.jar" module: "com.google.jstestdriver.coverage.CoverageM Tuesday, October 16, 12
  • 62. JASMINE IN DER IDE Tuesday, October 16, 12
  • 63. JASMINE IN DER IDE Tuesday, October 16, 12
  • 64. JASMINE IN DER IDE Tuesday, October 16, 12
  • 65. CODE-ANFORDERUNGEN • JSLinted • Kein Copy/Paste Code • Unittests • Akzeptanztests Tuesday, October 16, 12
  • 67. WARUM AKZEPTANZTESTS? • Tests gegen Akzeptanzkriterien • Anforderungen vs. Umsetzung • Nicht von Entwicklern Tuesday, October 16, 12
  • 69. SELENIUM IN JENKINS <target name=”selenium”> <exec executable=”java” output=”${basedir}/build/ selenium/results.html> <arg value=”-jar” /> <arg value=”/opt/selenium/selenium-server.jar” /> <arg value=”-htmlSuite” /> <arg value=”*firefox” /> <arg value=”http://datecalc.basti.dev” /> <arg value=”/srv/www/vhosts/datecalc/tests/ suite.html” /> </exec> </target> Tuesday, October 16, 12
  • 70. SELENIUM IN JENKINS • Plugin: Selenium HTML report Plugin • Post-build action: Publish Selenium HTML Report Tuesday, October 16, 12
  • 73. KONTAKT Sebastian Springer sebastian.springer@mayflower.de Mayflower GmbH Mannhardtstr. 6 80538 München Deutschland @basti_springer https://github.com/sspringer82 Tuesday, October 16, 12