Jasmine with JS-Test-Driver


Published on

Explored various java-script test-runners, which are capable of supporting JS tests on major browsers, of which JS-Test-Driver stands the most promising...

Published in: Technology

Jasmine with JS-Test-Driver

  1. 1. Problem Statement / Target<br />Ability to run JavaScript tests through commandline (not exactly headlessly)<br />Integrate test results with the Bamboo build plan<br />Visibility of code-coverage<br />
  2. 2. Options for JS test-runner tools<br />Env.js and Rhino.js<br />V8 JavaScript Engine<br />Jasmine-Maven plug-in<br />Jasmine-Ruby plug-in<br />Jasmine-JsTestDriver<br />
  3. 3. Env.js & Rhino.js<br />Uses its own JS engine<br />Is more closer to Mozilla Firefox<br />Still does not even behave as a mirror image of Firefox, on commandline<br />Findings: behaves as a different browser in itself<br />V8 JavaScript Engine<br />Google's open source JavaScript engine, used in chrome<br />Is a C++ code-base, needs to be compiled on local machine<br />Pretty capable, supports Mozilla and chrome, not sure about Safari<br />Findings: Pretty capable, but have not explored much<br />
  4. 4. Jasmine-Maven Plug-in<br />Uses HTMLUnit for headless browser runner<br />HTMLUnit’s only supports Firefox and IE<br />Findings – not capable to mock Safari capabilities<br />Jasmine-Ruby Plug-in<br />Has major issues with the “afterEach” and “toContains” Jasmine capabilities<br />Can run with any browser – need to open the SpecRunner.html on the browser of choice !!!<br />Findings – Promising, but needs to evolve<br />
  5. 5. JsTestDriver<br />
  6. 6. Why JsTestDriver<br />Can run JS tests through commandline, on the browser(ant version) of choice<br />Generates output in JUnit format, making it easier for Bamboo integration<br />Well compatible with Jasmine<br />Possesses code-coverage capability<br />Had certain minor issues, which have a workaround now<br />
  7. 7. Workarounds required for JTD<br />Not fully compatible with prototype.js – required jar fix<br />Jasmine spy issue, was unable to remove the spies – required Jasmine-JsTestDriver Adapter fix<br />Never closes the browser tab when test-runner completes – added a minor apple-script fix<br />
  8. 8. Testing with JTD<br />jsTestDriver configuration<br />server: http://localhost:9876<br />load:<br /> - "tools/jasmine-test-driver/jasmine-1.0.1.js"<br /> - "tools/jasmine-test-driver/JasmineAdapter.js"<br /> - "tools/jasmine-test-driver/prototype-"<br /> - "dist/qowt-browser-unitTests.js"<br />rake test<br />java -Xms512m -Xmx1024m <br />-jar tools/jasmine-test-driver/JsTestDriver-1.2.2.jar <br />--reset <br />--port 9876 <br />--runnerMode DEBUG <br />--browser open <br />--tests all <br />--testOutput tests/test-reports<br />
  9. 9. Creating test-append-area<br />QOWT.TEST.UTILS = function() {<br /> return {<br /> /**<br /> * creates dummy Test Append Area, and appends it to the document object, for running tests headlessly<br /> * While executing tests on Sumulat, you get "testAppendArea" div present in the html body itself.<br /> * But, in case of jsTestDriver, you do not have any such div present, and will have to create it on the fly.<br /> * @return testAppendArea div <br /> */<br />createTestAppendArea: function() {<br />vartestAppendAreaContainer = document.getElementById('testAppendArea');<br /> if(testAppendAreaContainer === null) {<br />testAppendAreaContainer = document.createElement("div");<br />testAppendAreaContainer.innerHTML = '<div id="testAppendArea"></div>';<br />document.body.insert(testAppendAreaContainer);<br /> }<br /> return document.getElementById('testAppendArea');<br /> }<br /> };<br />}();<br />USAGE: (CommonContentMrg-test.js)<br />testAppendArea = QOWT.TEST.UTILS.createTestAppendArea();<br />testAppendArea.appendChild(rootNode);<br />
  10. 10. Code-Coverage with JTD<br />rake coverage<br />http://quicknet/display/PROD/Generating+Code+Coverage+Reports<br />Coverage configurations<br />server: http://localhost:9876<br />load:<br /> - "../jasmine-1.0.1.js"<br /> - "../JasmineAdapter.js"<br /> - "../prototype-"<br /> - "../../../dist/qowt-browser-doc-sheet.js"<br /> - "../../../dist/qowt-browser-point.js"<br /> - "../../../dist/qowt-browser-testsOnly.js"<br />plugin:<br /> - name: "coverage"<br /> jar: "tools/jasmine-test-driver/plugins/coverage-1.2.2.jar"<br /> module: "com.google.jstestdriver.coverage.CoverageModule"<br />
  11. 11. Debugging on JTD<br />Start the server - java -Xms512m -Xmx1024m -jar tools/jasmine-test-driver/JsTestDriver-1.2.2.jar --port 9876<br />Open the browser with the url- http://localhost:9876/capture<br />Run the tests - java -Xms512m -Xmx1024m -jar tools/jasmine-test-driver/JsTestDriver-1.2.2.jar --tests all<br />Apply the breakpoint<br />Run the tests again<br />
  12. 12. Known issue with JTD<br />The rake script fails to close Safari window, if it has the developer console opened !!! <br />
  13. 13. Questions … ?<br />