Unit testování v JavaScriptu Petr Damborský
Motivace Čas Kvalita
Nástroje QUnit Chutzpah Jest UnitJS Jasmine JsTestDriver Karma YUI Mocha
ukázka nutné minimum
<!DOCTYPE html> <head> <title>QUnit 101</title> <script src="qunit-1.15.0.js"></script> <link rel="stylesheet" href="qunit-1.15.0.css"> </head> <body> <div id="qunit"></div> <div id="qunit-fixture"></div> <script> function add(a,b){ return a+b; } test('One plus one equals two.', function(assert){ assert.equal(add(1,1),2); }); </script> </body> </html>
DEMO chat
* QUnit.test() IntelliSense QUnit.module() assert IntelliSense _references.js /// <reference path="../Scripts/qunit-1.14.0.js" /> QUnit.module() setup teardown Chutzpah Test Runner Context Menu Extension /// <reference path="../Scripts/app.js" />
DEMO ASYNC CHAT
* QUnit.asyncTest() QUnit.start() QUnit.stop() QUnit.expect() Mockjax SinonJS
demo continuous integration
* TeamCity Instalace Chutzpah Build konfigurace VCS root – GitHub Build step – command line executable – Chutzpah Code Coverage – MSBuild Ignorování vybraných souborů
téma testovatelný kód
* Dependency Injection Interface > Implementace SOLID principy IoC: Wire/CujoJS, AngularJS Interface > Implementace SOLID principy Single responsibility Open/closed Liskov substitution Interface segregation Dependency inversion
Demo Refactoring špatného kódu
Q&A petr.damborsky@gmail.com https://github.com/pdamb