SlideShare a Scribd company logo
Efficient JavaScript Unit Testing
Hazem Saleh

09 March 2013
Developers Life without Unit testing.

    What is unit testing? and why?

    Current Complexities in testing JavaScript code.

    Requirements of a good JavaScript unit testing tool.
O
U   What is JsTestDriver.
T   JsTestDriver Architecture & Configuration
L
I   JsTestDriver Eclipse plugin.
N   Writing a JavaScript TestCase.
E   JsTestDriver common constructs.

    Writing asynchronous JavaScript TestCase.

    JsTestDriver Compatibility
    Generating reports from test cases.
Developers Life without Unit testing

Complex integration between the system components.
Developers Life without Unit testing

Unmanaged number of new/regression defects especially when
the system complexity increases.
Developers Life without Unit testing
Low application quality.

Longer testing cycle.


                                  fix   test
                           test                fix


                     fix                             test



                  test                                  fix



                     fix                             test


                           test                fix
                                  fix   test
Developers Life without Unit testing.

    What is unit testing? and why?

    Current Complexities in testing JavaScript code.

    Requirements of a good JavaScript unit testing tool.
O
U   What is JsTestDriver.
T   JsTestDriver Architecture & Configuration
L
I   JsTestDriver Eclipse plugin.
N   Writing a JavaScript TestCase.
E   JsTestDriver common constructs.

    Writing asynchronous JavaScript TestCase.

    JsTestDriver Compatibility
    Generating reports from test cases.
What is unit testing and why?

A unit testing is a piece of code (usually a method) that
invokes another piece of code and later checks the correctness of
some assumptions


Unit testing helps in detecting BUGGY components in the early
stages of the project.


A test suite is a set of test cases, and a test case is a set of tests
which verifies the system components.
Good Unit Test Characteristics

                     Automated



   Repeatable                             Fast



   Easy to run.                        Incremental



                  Easy to understand
What is unit testing and why?

Integration is much simplified.

Defects are managed. Regression defects should not happen if the defect is
resolved by creating a new test case.

Test cases can be a good reference for system documentation.

Test cases can improve the system design and be the basis of code refactoring.

Application quality increases.

Testing cycle is reduced.
Developers Life without Unit testing.

    What is unit testing? and why?

    Current Complexities in testing JavaScript code.

    Requirements of a good JavaScript unit testing tool.
O
U   What is JsTestDriver.
T   JsTestDriver Architecture & Configuration
L
I   JsTestDriver Eclipse plugin.
N   Writing a JavaScript TestCase.
E   JsTestDriver common constructs.

    Writing asynchronous JavaScript TestCase.

    JsTestDriver Compatibility
    Generating reports from test cases.
Current Complexities in testing JavaScript code

                                    Slow

   Requires a lot of time to test on all the browsers.

   JavaScript code that runs on a specific browser does not necessarily
   mean that it will work on other browsers.

                                 Inflexible

    Supporting a new browser means allocating a new budget for
    testing the system again on this new browser and for the
    new/regression defects fixes.
Developers Life without Unit testing.

    What is unit testing? and why?

    Current Complexities in testing JavaScript code.

    Requirements of a good JavaScript unit testing tool.
O
U   What is JsTestDriver.
T   JsTestDriver Architecture & Configuration
L
I   JsTestDriver Eclipse plugin.
N   Writing a JavaScript TestCase.
E   JsTestDriver common constructs.

    Writing asynchronous JavaScript TestCase.

    JsTestDriver Compatibility
    Generating reports from test cases.
Good JavaScript Unit Testing Tool Requirements

                             JavaScript unit
                               testing tool

Can execute across all                               Fast Test case
the browsers over                                    execution.
 all the platforms.



               Easy setup.                 Integration with IDEs.



 Easy configuration.                             Integration with build
                                                 management tools.
Developers Life without Unit testing.

    What is unit testing? and why?

    Current Complexities in testing JavaScript code.

    Requirements of a good JavaScript unit testing tool.
O
U   What is JsTestDriver.
T   JsTestDriver Architecture & Configuration
L
I   JsTestDriver Eclipse plugin.
N   Writing a JavaScript TestCase.
E   JsTestDriver common constructs.

    Writing asynchronous JavaScript TestCase.

    JsTestDriver Compatibility
    Generating reports from test cases.
What is JsTestDriver

  One of the best Open source JavaScript testing tools.

  Meets all of the previous requirements and more:

             Supports all the browsers / all platforms. ✓

             Easy setup and configuration. ✓

             Fast Test case execution. ✓

             Integration with IDEs and build management tools. ✓
Developers Life without Unit testing.

    What is unit testing? and why?

    Current Complexities in testing JavaScript code.

    Requirements of a good JavaScript unit testing tool.
O
U   What is JsTestDriver.
T   JsTestDriver Architecture & Configuration
                                Configuration.
L
I   JsTestDriver Eclipse plugin.
N   Writing a JavaScript TestCase.
E   JsTestDriver common constructs.

    Writing asynchronous JavaScript TestCase.

    JsTestDriver Compatibility
    Generating reports from test cases.
JsTestDriver Architecture
JsTestDriver configuration


1   Run the test cases using the following command line
JsTestDriver configuration


1   2   Download the jsTestDriver latest jars from


         http://code.google.com/p/js-test-driver/downloads/list
JsTestDriver configuration

            Create the jsTestDriver.conf file (under the JS folder)
1   2   3   with the following initial content:



        server: http://localhost:9876
        load:
         - js-src/*.js
         - js-test/*.js
JsTestDriver configuration

                      Start the server using the following command
1       2   3   4     line




    java -jar JsTestDriver-1.3.2.jar
   Optional parameters
     [--port 9876]
     [--browser
      “{PATH}firefox.exe","{PATH}iexplore.exe","{P
      ATH}Safari.exe"]
JsTestDriver configuration

                               Run the test cases using the following
  1    2     3     4     5     command line



java -jar JsTestDriver-1.3.2.jar --tests all
.........
Total 9 tests (Passed: 9; Fails: 0; Errors: 0) (16.00 ms)
  Firefox 9.0.1 Windows: Run 3 tests (Passed: 3; Fails: 0; Errors 0)
(3.00 ms)
  Safari 534.52.7 Windows: Run 3 tests (Passed: 3; Fails: 0; Errors
0) (4.00 ms)
  Microsoft Internet Explorer 7.0 Windows: Run 3 tests (Passed: 3;
Fails: 0; Errors 0) (16.00 ms)
Developers Life without Unit testing.

    What is unit testing? and why?

    Current Complexities in testing JavaScript code.

    Requirements of a good JavaScript unit testing tool.
O
U   What is JsTestDriver.
T   JsTestDriver Architecture & Configuration
L
    JsTestDriver Eclipse plugin.
I
N   Writing a JavaScript TestCase.
E   JsTestDriver common constructs.

    Writing asynchronous JavaScript TestCase.

    JsTestDriver Compatibility
    Generating reports from test cases.
JsTestDriver Eclipse plugin


Instead of using command lines for starting the server and running the test
cases, you can directly use the jsTestDriver Eclipse plugin.



To install the JsTestDriver Eclipse plugin install the plugin from the following
URL : http://js-test-driver.googlecode.com/svn/update/
JsTestDriver Eclipse plugin
JsTestDriver Eclipse plugin
Developers Life without Unit testing.

    What is unit testing? and why?

    Current Complexities in testing JavaScript code.

    Requirements of a good JavaScript unit testing tool.
O
U   What is JsTestDriver.
T   JsTestDriver Architecture & Configuration
L
I   JsTestDriver Eclipse plugin.
N   Writing a JavaScript TestCase.
E   JsTestDriver common constructs.

    Writing asynchronous JavaScript TestCase.

    JsTestDriver Compatibility
    Generating reports from test cases.
Writing a JavaScript TestCase

ApplicationUtilTest = TestCase("ApplicationUtilTest");

ApplicationUtilTest.prototype.setUp = function () {
   /*:DOC += ...HTML fragment code goes here (single root) ...*/
};

ApplicationUtilTest.prototype.testMethod1 = function () {
  … validate using the jsTestDriver constructs …
}

ApplicationUtilTest.prototype.testMethod2 = function () {
  … validate using the jsTestDriver constructs …
}

...
Developers Life without Unit testing.

    What is unit testing? and why?

    Current Complexities in testing JavaScript code.

    Requirements of a good JavaScript unit testing tool.
O
U   What is JsTestDriver.
T   JsTestDriver Architecture & Configuration
L
I   JsTestDriver Eclipse plugin.
N   Writing a JavaScript TestCase.
E   JsTestDriver common constructs.

    Writing asynchronous JavaScript TestCase.

    JsTestDriver Compatibility
    Generating reports from test cases.
JsTestDriver common constructs

    fail("msg")

    assertTrue("msg", actual)

    assertFalse("msg", actual)

    assertSame("msg", expected, actual)

    assertNotSame("msg", expected, actual)

    assertNull("msg", actual)

    assertNotNull("msg", actual)
DEMO
Let’s write synchronous JS
       Test cases …
Developers Life without Unit testing.

    What is unit testing? and why?

    Current Complexities in testing JavaScript code.

    Requirements of a good JavaScript unit testing tool.
O
U   What is JsTestDriver.
T   JsTestDriver Architecture & Configuration
L
I   JsTestDriver Eclipse plugin.
N   Writing a JavaScript TestCase.
E   JsTestDriver common constructs.

    Writing asynchronous JavaScript TestCase.

    JsTestDriver Compatibility
    Generating reports from test cases.
Writing asynchronous JavaScript TestCase
AsyncTest = AsyncTestCase("AsynchronousTesting");

AsyncTest.prototype.setUp = function () {
/*:DOC += <!-- Initialization code -->*/
};
AsyncTest.prototype.testOperationOne = function(queue) {
    queue.call('Step1', function(callbacks) {
    var asyncObject = new AsyncObject ();

       var successCallBack = callbacks.add(function(successData) {
            // validate (successData) if possible ....
        });

        var failureCallBack = callbacks.addErrback('Error Message');

       // call asynchronous API
       asyncObject.operationOne(inputData,
                                  successCallBack,
                                failureCallBack);
 });
};
Writing asynchronous JavaScript TestCase
Every inline function provides a callbacks parameter for
testing the Ajax APIs. There are two types of
callbacks:
• Success callback: Represents the success path. It
  MUST be called in order to pass the test.
• Error callback: Represents the error path. If it is
  called, then the test fails.


The test runner does not move to the next queue until
the current queue executes all of its success callbacks. If
a specific success callback is not called for a specific
amount of time (30 seconds), the test fails.
DEMO
Let’s write Asynchronous JS
       Test cases …
Developers Life without Unit testing.

    What is unit testing? and why?

    Current Complexities in testing JavaScript code.

    Requirements of a good JavaScript unit testing tool.
O
U   What is JsTestDriver.
T   JsTestDriver Architecture & Configuration
L
I   JsTestDriver Eclipse plugin.
N   Writing a JavaScript TestCase.
E   JsTestDriver common constructs.

    Writing asynchronous JavaScript TestCase.

    JsTestDriver Compatibility

    Generating reports from test cases.
JsTestDriver Compatibility


JsTestDriver is not only a JavaScript unit testing
framework BUT it is a test runner for many other
JavaScript unit testing frameworks.

JsTestDriver is compatibility with the following
JavaScript unit testing frameworks through adapters:
   • Jasmine
   • YUI Test
   • QUnit
JsTestDriver Compatibility


In order to run the previous unit testing frameworks
on the top of the JSTD test runner. You need to
configure the framework adapter and source before
the test files as follows:

 server: http://localhost:9876

 load:
  - jasmine/lib/jasmine-1.1.0/jasmine.js
  - jasmine/lib/adapter/JasmineAdapter.js
  - js-src/Basics.js
  - js-test/BasicsSpec.js
DEMO
Running Jasmine Test cases
   on the top of JSTD
Developers Life without Unit testing.

    What is unit testing? and why?

    Current Complexities in testing JavaScript code.

    Requirements of a good JavaScript unit testing tool.
O
U   What is JsTestDriver.
T   JsTestDriver Architecture & Configuration
L
I   JsTestDriver Eclipse plugin.
N   Writing a JavaScript TestCase.
E   JsTestDriver common constructs.

    Writing asynchronous JavaScript TestCase.

    JsTestDriver Compatibility

    Generating reports from test cases.
Generating reports from test cases


JSTD can generate code coverage files.

Code coverage describes how much the source code is tested.


Coverage Criteria:

                     Function coverage

                                 statement coverage

                                            Branch
                                                 coverage
JsTestDriver
   can generate code coverage
for your JavaScript code using the
      code coverage plugin.
Generating reports from test cases



           Configuring the plugin:
Download the      Add the coverage plugin declaration   Specify the --
“coverage.jar”.   to the configuration file:            testOutput
                  plugin:                               <<output_folder>>
                                                        flag in the test
                  - name: "coverage"                    running command.
                  jar: "plugins/coverage.jar"
                  module:
                  "com.google.jstestdriver.coverage.C
                  overageModule"
Generating reports from test cases


Unfortunately   JsTestDriver does not generate HTML reports directly,

                       JsTestDriver generates the test coverage files in LCOV
                       and XML formats.

                You can generate the HTML test reports using the
                LCOV visualizer tool:

                       http://ltp.sourceforge.net/coverage/lcov.php
Generating reports from test cases


       The JsTestDriver LCOV file name is usually:

              <config filename>-coverage.dat (jsTestDriver.conf-
              coverage.dat)

       To generate the report from the LCOV file using the
       LCOV visualizer tool:

              genhtml jsTestDriver.conf-coverage.dat
Conclusion
Conclusion

  Testing JavaScript code is important for increasing the
  application quality and for speeding up fixing defects and
  minimizing the number of regression defects.


  Good JavaScript tool should be configurable, easy to use,
  and working with all the browsers.


  JsTestDriver is one of the most powerful JavaScript unit
  testing tools that can be used for testing both synchronous
  and asynchronous JavaScript code on all the browsers.
Question of the session (Free book copy)

<script>
(function() {
  var x = 10,
   y = 20,
   z = x+++y;
  alert(x);   //?
  alert(y);   //?
  alert(z);   //?
})();
</script>           http://www.amazon.com/dp/1782160620/
                    JavaScript Unit Testing Book
Efficient JavaScript Unit Testing, March 2013
Contact me

Twitter: http://www.twitter.com/hazems
LinkedIn: http://eg.linkedin.com/in/hazemsaleh
Blog: http://www.technicaladvices.com
Email: hazems@apache.org

More Related Content

ODP
Android Test Driven Development
PPT
Testing and Mocking Object - The Art of Mocking.
PPT
Unit testing with java
PDF
Efficient JavaScript Unit Testing, JavaOne China 2013
PPTX
Junit4&testng presentation
PPTX
Unit Testing in Java
ODP
Embrace Unit Testing
Android Test Driven Development
Testing and Mocking Object - The Art of Mocking.
Unit testing with java
Efficient JavaScript Unit Testing, JavaOne China 2013
Junit4&testng presentation
Unit Testing in Java
Embrace Unit Testing

What's hot (20)

ODP
Testing In Java
ODP
Test ng
PPTX
TDD with Visual Studio 2010
PDF
PPT
JMockit
PPTX
Unit Testing Android Applications
PPTX
.Net Unit Testing with Visual Studio 2010
PDF
Unit testing with JUnit
PDF
Unit Testing
PPS
JUnit Presentation
PPTX
JUNit Presentation
PDF
Testacular
PPTX
Junit and cactus
PPT
Automated Unit Testing
DOCX
Realtime selenium interview questions
PPTX
[AnDevCon 2016] Mutation Testing for Android
PPTX
Mockito vs JMockit, battle of the mocking frameworks
PDF
JAVASCRIPT TDD(Test driven Development) & Qunit Tutorial
PPTX
Principles and patterns for test driven development
PDF
Unit Testing 101
Testing In Java
Test ng
TDD with Visual Studio 2010
JMockit
Unit Testing Android Applications
.Net Unit Testing with Visual Studio 2010
Unit testing with JUnit
Unit Testing
JUnit Presentation
JUNit Presentation
Testacular
Junit and cactus
Automated Unit Testing
Realtime selenium interview questions
[AnDevCon 2016] Mutation Testing for Android
Mockito vs JMockit, battle of the mocking frameworks
JAVASCRIPT TDD(Test driven Development) & Qunit Tutorial
Principles and patterns for test driven development
Unit Testing 101
Ad

Viewers also liked (7)

PPTX
Visage Android - Cleaner APIs, Cleaner UIs
PPTX
JavaFX and Scala in the Cloud
PPTX
JavaFX 2.0 With Alternative Languages - JavaOne 2011
PDF
Orishas mitos-y-leyendas
PPTX
Beginning Android Flash Development - GTUG Edition
PDF
DukeScript
PPTX
JCrete Embedded Java Workshop
Visage Android - Cleaner APIs, Cleaner UIs
JavaFX and Scala in the Cloud
JavaFX 2.0 With Alternative Languages - JavaOne 2011
Orishas mitos-y-leyendas
Beginning Android Flash Development - GTUG Edition
DukeScript
JCrete Embedded Java Workshop
Ad

Similar to Efficient JavaScript Unit Testing, March 2013 (20)

PDF
Efficient JavaScript Unit Testing, May 2012
PPT
JavaScript Unit Testing
DOCX
Test Driven Development
ODP
S313352 optimizing java device testing with automatic feature discovering
PDF
[FullStack NYC 2019] Effective Unit Tests for JavaScript
PDF
JavaScript Unit Testing with an Angular 5.x Use Case 101
PPT
Pragmatic Parallels: Java and JavaScript
PPTX
Test driven development in .Net - 2010 + Eclipse
PDF
Javascript Unit Testing
PPTX
Angular Unit testing.pptx
PDF
Testing Angular
PPT
Test strategy for web development
PPTX
Unit test
PDF
PDF
Quest to the best test automation for low code development platform kherrazi ...
PPTX
Qa process
PDF
Test and Behaviour Driven Development (TDD/BDD)
PDF
Unit Testing Fundamentals
PPTX
Java script unit testing
PPTX
Testing of React JS app
Efficient JavaScript Unit Testing, May 2012
JavaScript Unit Testing
Test Driven Development
S313352 optimizing java device testing with automatic feature discovering
[FullStack NYC 2019] Effective Unit Tests for JavaScript
JavaScript Unit Testing with an Angular 5.x Use Case 101
Pragmatic Parallels: Java and JavaScript
Test driven development in .Net - 2010 + Eclipse
Javascript Unit Testing
Angular Unit testing.pptx
Testing Angular
Test strategy for web development
Unit test
Quest to the best test automation for low code development platform kherrazi ...
Qa process
Test and Behaviour Driven Development (TDD/BDD)
Unit Testing Fundamentals
Java script unit testing
Testing of React JS app

More from Hazem Saleh (13)

PDF
Mockito 2.x Migration - Droidcon UK 2018
PPTX
[ApacheCon 2016] Advanced Apache Cordova
PPTX
[Devoxx Morocco 2015] Apache Cordova In Action
PPTX
Apache Cordova In Action
PPTX
[JavaLand 2015] Developing JavaScript Mobile Apps Using Apache Cordova
PPTX
[JMaghreb 2014] Developing JavaScript Mobile Apps Using Apache Cordova
PDF
Developing Native Mobile Apps Using JavaScript, ApacheCon NA 2014
PDF
Dojo >= 1.7 Kickstart
PDF
Efficient JavaScript Unit Testing (Chinese Version), JavaOne China 2013
PDF
JSF Mashups in Action
PDF
JavaScript tools
PDF
[JavaOne 2010] Abstract Mashups for Enterprise Java
PDF
GMaps4JSF
Mockito 2.x Migration - Droidcon UK 2018
[ApacheCon 2016] Advanced Apache Cordova
[Devoxx Morocco 2015] Apache Cordova In Action
Apache Cordova In Action
[JavaLand 2015] Developing JavaScript Mobile Apps Using Apache Cordova
[JMaghreb 2014] Developing JavaScript Mobile Apps Using Apache Cordova
Developing Native Mobile Apps Using JavaScript, ApacheCon NA 2014
Dojo >= 1.7 Kickstart
Efficient JavaScript Unit Testing (Chinese Version), JavaOne China 2013
JSF Mashups in Action
JavaScript tools
[JavaOne 2010] Abstract Mashups for Enterprise Java
GMaps4JSF

Recently uploaded (20)

PDF
Abdominal Access Techniques with Prof. Dr. R K Mishra
PDF
TR - Agricultural Crops Production NC III.pdf
PDF
BÀI TẬP BỔ TRỢ 4 KỸ NĂNG TIẾNG ANH 9 GLOBAL SUCCESS - CẢ NĂM - BÁM SÁT FORM Đ...
PDF
Chapter 2 Heredity, Prenatal Development, and Birth.pdf
PDF
O5-L3 Freight Transport Ops (International) V1.pdf
PDF
O7-L3 Supply Chain Operations - ICLT Program
PDF
Module 4: Burden of Disease Tutorial Slides S2 2025
PDF
FourierSeries-QuestionsWithAnswers(Part-A).pdf
PDF
Classroom Observation Tools for Teachers
PPTX
Cell Structure & Organelles in detailed.
PDF
2.FourierTransform-ShortQuestionswithAnswers.pdf
PDF
Pre independence Education in Inndia.pdf
PDF
Physiotherapy_for_Respiratory_and_Cardiac_Problems WEBBER.pdf
PDF
Microbial disease of the cardiovascular and lymphatic systems
PDF
RMMM.pdf make it easy to upload and study
PPTX
Pharmacology of Heart Failure /Pharmacotherapy of CHF
PPTX
Lesson notes of climatology university.
PPTX
Institutional Correction lecture only . . .
PDF
Insiders guide to clinical Medicine.pdf
PDF
Supply Chain Operations Speaking Notes -ICLT Program
Abdominal Access Techniques with Prof. Dr. R K Mishra
TR - Agricultural Crops Production NC III.pdf
BÀI TẬP BỔ TRỢ 4 KỸ NĂNG TIẾNG ANH 9 GLOBAL SUCCESS - CẢ NĂM - BÁM SÁT FORM Đ...
Chapter 2 Heredity, Prenatal Development, and Birth.pdf
O5-L3 Freight Transport Ops (International) V1.pdf
O7-L3 Supply Chain Operations - ICLT Program
Module 4: Burden of Disease Tutorial Slides S2 2025
FourierSeries-QuestionsWithAnswers(Part-A).pdf
Classroom Observation Tools for Teachers
Cell Structure & Organelles in detailed.
2.FourierTransform-ShortQuestionswithAnswers.pdf
Pre independence Education in Inndia.pdf
Physiotherapy_for_Respiratory_and_Cardiac_Problems WEBBER.pdf
Microbial disease of the cardiovascular and lymphatic systems
RMMM.pdf make it easy to upload and study
Pharmacology of Heart Failure /Pharmacotherapy of CHF
Lesson notes of climatology university.
Institutional Correction lecture only . . .
Insiders guide to clinical Medicine.pdf
Supply Chain Operations Speaking Notes -ICLT Program

Efficient JavaScript Unit Testing, March 2013

  • 1. Efficient JavaScript Unit Testing Hazem Saleh 09 March 2013
  • 2. Developers Life without Unit testing. What is unit testing? and why? Current Complexities in testing JavaScript code. Requirements of a good JavaScript unit testing tool. O U What is JsTestDriver. T JsTestDriver Architecture & Configuration L I JsTestDriver Eclipse plugin. N Writing a JavaScript TestCase. E JsTestDriver common constructs. Writing asynchronous JavaScript TestCase. JsTestDriver Compatibility Generating reports from test cases.
  • 3. Developers Life without Unit testing Complex integration between the system components.
  • 4. Developers Life without Unit testing Unmanaged number of new/regression defects especially when the system complexity increases.
  • 5. Developers Life without Unit testing Low application quality. Longer testing cycle. fix test test fix fix test test fix fix test test fix fix test
  • 6. Developers Life without Unit testing. What is unit testing? and why? Current Complexities in testing JavaScript code. Requirements of a good JavaScript unit testing tool. O U What is JsTestDriver. T JsTestDriver Architecture & Configuration L I JsTestDriver Eclipse plugin. N Writing a JavaScript TestCase. E JsTestDriver common constructs. Writing asynchronous JavaScript TestCase. JsTestDriver Compatibility Generating reports from test cases.
  • 7. What is unit testing and why? A unit testing is a piece of code (usually a method) that invokes another piece of code and later checks the correctness of some assumptions Unit testing helps in detecting BUGGY components in the early stages of the project. A test suite is a set of test cases, and a test case is a set of tests which verifies the system components.
  • 8. Good Unit Test Characteristics Automated Repeatable Fast Easy to run. Incremental Easy to understand
  • 9. What is unit testing and why? Integration is much simplified. Defects are managed. Regression defects should not happen if the defect is resolved by creating a new test case. Test cases can be a good reference for system documentation. Test cases can improve the system design and be the basis of code refactoring. Application quality increases. Testing cycle is reduced.
  • 10. Developers Life without Unit testing. What is unit testing? and why? Current Complexities in testing JavaScript code. Requirements of a good JavaScript unit testing tool. O U What is JsTestDriver. T JsTestDriver Architecture & Configuration L I JsTestDriver Eclipse plugin. N Writing a JavaScript TestCase. E JsTestDriver common constructs. Writing asynchronous JavaScript TestCase. JsTestDriver Compatibility Generating reports from test cases.
  • 11. Current Complexities in testing JavaScript code Slow Requires a lot of time to test on all the browsers. JavaScript code that runs on a specific browser does not necessarily mean that it will work on other browsers. Inflexible Supporting a new browser means allocating a new budget for testing the system again on this new browser and for the new/regression defects fixes.
  • 12. Developers Life without Unit testing. What is unit testing? and why? Current Complexities in testing JavaScript code. Requirements of a good JavaScript unit testing tool. O U What is JsTestDriver. T JsTestDriver Architecture & Configuration L I JsTestDriver Eclipse plugin. N Writing a JavaScript TestCase. E JsTestDriver common constructs. Writing asynchronous JavaScript TestCase. JsTestDriver Compatibility Generating reports from test cases.
  • 13. Good JavaScript Unit Testing Tool Requirements JavaScript unit testing tool Can execute across all Fast Test case the browsers over execution. all the platforms. Easy setup. Integration with IDEs. Easy configuration. Integration with build management tools.
  • 14. Developers Life without Unit testing. What is unit testing? and why? Current Complexities in testing JavaScript code. Requirements of a good JavaScript unit testing tool. O U What is JsTestDriver. T JsTestDriver Architecture & Configuration L I JsTestDriver Eclipse plugin. N Writing a JavaScript TestCase. E JsTestDriver common constructs. Writing asynchronous JavaScript TestCase. JsTestDriver Compatibility Generating reports from test cases.
  • 15. What is JsTestDriver One of the best Open source JavaScript testing tools. Meets all of the previous requirements and more: Supports all the browsers / all platforms. ✓ Easy setup and configuration. ✓ Fast Test case execution. ✓ Integration with IDEs and build management tools. ✓
  • 16. Developers Life without Unit testing. What is unit testing? and why? Current Complexities in testing JavaScript code. Requirements of a good JavaScript unit testing tool. O U What is JsTestDriver. T JsTestDriver Architecture & Configuration Configuration. L I JsTestDriver Eclipse plugin. N Writing a JavaScript TestCase. E JsTestDriver common constructs. Writing asynchronous JavaScript TestCase. JsTestDriver Compatibility Generating reports from test cases.
  • 18. JsTestDriver configuration 1 Run the test cases using the following command line
  • 19. JsTestDriver configuration 1 2 Download the jsTestDriver latest jars from http://code.google.com/p/js-test-driver/downloads/list
  • 20. JsTestDriver configuration Create the jsTestDriver.conf file (under the JS folder) 1 2 3 with the following initial content: server: http://localhost:9876 load: - js-src/*.js - js-test/*.js
  • 21. JsTestDriver configuration Start the server using the following command 1 2 3 4 line java -jar JsTestDriver-1.3.2.jar  Optional parameters  [--port 9876]  [--browser “{PATH}firefox.exe","{PATH}iexplore.exe","{P ATH}Safari.exe"]
  • 22. JsTestDriver configuration Run the test cases using the following 1 2 3 4 5 command line java -jar JsTestDriver-1.3.2.jar --tests all ......... Total 9 tests (Passed: 9; Fails: 0; Errors: 0) (16.00 ms) Firefox 9.0.1 Windows: Run 3 tests (Passed: 3; Fails: 0; Errors 0) (3.00 ms) Safari 534.52.7 Windows: Run 3 tests (Passed: 3; Fails: 0; Errors 0) (4.00 ms) Microsoft Internet Explorer 7.0 Windows: Run 3 tests (Passed: 3; Fails: 0; Errors 0) (16.00 ms)
  • 23. Developers Life without Unit testing. What is unit testing? and why? Current Complexities in testing JavaScript code. Requirements of a good JavaScript unit testing tool. O U What is JsTestDriver. T JsTestDriver Architecture & Configuration L JsTestDriver Eclipse plugin. I N Writing a JavaScript TestCase. E JsTestDriver common constructs. Writing asynchronous JavaScript TestCase. JsTestDriver Compatibility Generating reports from test cases.
  • 24. JsTestDriver Eclipse plugin Instead of using command lines for starting the server and running the test cases, you can directly use the jsTestDriver Eclipse plugin. To install the JsTestDriver Eclipse plugin install the plugin from the following URL : http://js-test-driver.googlecode.com/svn/update/
  • 27. Developers Life without Unit testing. What is unit testing? and why? Current Complexities in testing JavaScript code. Requirements of a good JavaScript unit testing tool. O U What is JsTestDriver. T JsTestDriver Architecture & Configuration L I JsTestDriver Eclipse plugin. N Writing a JavaScript TestCase. E JsTestDriver common constructs. Writing asynchronous JavaScript TestCase. JsTestDriver Compatibility Generating reports from test cases.
  • 28. Writing a JavaScript TestCase ApplicationUtilTest = TestCase("ApplicationUtilTest"); ApplicationUtilTest.prototype.setUp = function () { /*:DOC += ...HTML fragment code goes here (single root) ...*/ }; ApplicationUtilTest.prototype.testMethod1 = function () { … validate using the jsTestDriver constructs … } ApplicationUtilTest.prototype.testMethod2 = function () { … validate using the jsTestDriver constructs … } ...
  • 29. Developers Life without Unit testing. What is unit testing? and why? Current Complexities in testing JavaScript code. Requirements of a good JavaScript unit testing tool. O U What is JsTestDriver. T JsTestDriver Architecture & Configuration L I JsTestDriver Eclipse plugin. N Writing a JavaScript TestCase. E JsTestDriver common constructs. Writing asynchronous JavaScript TestCase. JsTestDriver Compatibility Generating reports from test cases.
  • 30. JsTestDriver common constructs fail("msg") assertTrue("msg", actual) assertFalse("msg", actual) assertSame("msg", expected, actual) assertNotSame("msg", expected, actual) assertNull("msg", actual) assertNotNull("msg", actual)
  • 31. DEMO Let’s write synchronous JS Test cases …
  • 32. Developers Life without Unit testing. What is unit testing? and why? Current Complexities in testing JavaScript code. Requirements of a good JavaScript unit testing tool. O U What is JsTestDriver. T JsTestDriver Architecture & Configuration L I JsTestDriver Eclipse plugin. N Writing a JavaScript TestCase. E JsTestDriver common constructs. Writing asynchronous JavaScript TestCase. JsTestDriver Compatibility Generating reports from test cases.
  • 33. Writing asynchronous JavaScript TestCase AsyncTest = AsyncTestCase("AsynchronousTesting"); AsyncTest.prototype.setUp = function () { /*:DOC += <!-- Initialization code -->*/ }; AsyncTest.prototype.testOperationOne = function(queue) { queue.call('Step1', function(callbacks) { var asyncObject = new AsyncObject (); var successCallBack = callbacks.add(function(successData) { // validate (successData) if possible .... }); var failureCallBack = callbacks.addErrback('Error Message'); // call asynchronous API asyncObject.operationOne(inputData, successCallBack, failureCallBack); }); };
  • 34. Writing asynchronous JavaScript TestCase Every inline function provides a callbacks parameter for testing the Ajax APIs. There are two types of callbacks: • Success callback: Represents the success path. It MUST be called in order to pass the test. • Error callback: Represents the error path. If it is called, then the test fails. The test runner does not move to the next queue until the current queue executes all of its success callbacks. If a specific success callback is not called for a specific amount of time (30 seconds), the test fails.
  • 35. DEMO Let’s write Asynchronous JS Test cases …
  • 36. Developers Life without Unit testing. What is unit testing? and why? Current Complexities in testing JavaScript code. Requirements of a good JavaScript unit testing tool. O U What is JsTestDriver. T JsTestDriver Architecture & Configuration L I JsTestDriver Eclipse plugin. N Writing a JavaScript TestCase. E JsTestDriver common constructs. Writing asynchronous JavaScript TestCase. JsTestDriver Compatibility Generating reports from test cases.
  • 37. JsTestDriver Compatibility JsTestDriver is not only a JavaScript unit testing framework BUT it is a test runner for many other JavaScript unit testing frameworks. JsTestDriver is compatibility with the following JavaScript unit testing frameworks through adapters: • Jasmine • YUI Test • QUnit
  • 38. JsTestDriver Compatibility In order to run the previous unit testing frameworks on the top of the JSTD test runner. You need to configure the framework adapter and source before the test files as follows: server: http://localhost:9876 load: - jasmine/lib/jasmine-1.1.0/jasmine.js - jasmine/lib/adapter/JasmineAdapter.js - js-src/Basics.js - js-test/BasicsSpec.js
  • 39. DEMO Running Jasmine Test cases on the top of JSTD
  • 40. Developers Life without Unit testing. What is unit testing? and why? Current Complexities in testing JavaScript code. Requirements of a good JavaScript unit testing tool. O U What is JsTestDriver. T JsTestDriver Architecture & Configuration L I JsTestDriver Eclipse plugin. N Writing a JavaScript TestCase. E JsTestDriver common constructs. Writing asynchronous JavaScript TestCase. JsTestDriver Compatibility Generating reports from test cases.
  • 41. Generating reports from test cases JSTD can generate code coverage files. Code coverage describes how much the source code is tested. Coverage Criteria: Function coverage statement coverage Branch coverage
  • 42. JsTestDriver can generate code coverage for your JavaScript code using the code coverage plugin.
  • 43. Generating reports from test cases Configuring the plugin: Download the Add the coverage plugin declaration Specify the -- “coverage.jar”. to the configuration file: testOutput plugin: <<output_folder>> flag in the test - name: "coverage" running command. jar: "plugins/coverage.jar" module: "com.google.jstestdriver.coverage.C overageModule"
  • 44. Generating reports from test cases Unfortunately JsTestDriver does not generate HTML reports directly, JsTestDriver generates the test coverage files in LCOV and XML formats. You can generate the HTML test reports using the LCOV visualizer tool: http://ltp.sourceforge.net/coverage/lcov.php
  • 45. Generating reports from test cases The JsTestDriver LCOV file name is usually: <config filename>-coverage.dat (jsTestDriver.conf- coverage.dat) To generate the report from the LCOV file using the LCOV visualizer tool: genhtml jsTestDriver.conf-coverage.dat
  • 47. Conclusion Testing JavaScript code is important for increasing the application quality and for speeding up fixing defects and minimizing the number of regression defects. Good JavaScript tool should be configurable, easy to use, and working with all the browsers. JsTestDriver is one of the most powerful JavaScript unit testing tools that can be used for testing both synchronous and asynchronous JavaScript code on all the browsers.
  • 48. Question of the session (Free book copy) <script> (function() { var x = 10, y = 20, z = x+++y; alert(x); //? alert(y); //? alert(z); //? })(); </script> http://www.amazon.com/dp/1782160620/ JavaScript Unit Testing Book
  • 50. Contact me Twitter: http://www.twitter.com/hazems LinkedIn: http://eg.linkedin.com/in/hazemsaleh Blog: http://www.technicaladvices.com Email: hazems@apache.org