+++ title = "karma" draft = false tags = [ "code", "javascript", "testing", "karma" ] date = "2013-05-17" +++ # Karma (Testacular) Ook integratie met [code/javascript/testing/phantomjs]({{< relref "wiki/code/javascript/testing/phantomjs.md" >}}) mogelijk. ### Installatie Om de Karma testen gedraaid te krijgen moet Node geïnstalleerd zijn samen met karma (`npm install karma -g`) Voor de **ANSI console** in eclipse: http://www.mihai-nita.net/eclipse/ installeren Voor de Karma Phantom launcher in eclipse: dit importeren (launch file) ```xml ``` Debuggen met eclipse gaat blijkbaar niet, daarvoor moet je best http://www.jetbrains.com/webstorm/ gebruiken. Wat ik nog heb bijgeleerd van jasmine: een individuele test tijdelijk draaien die je door `iit()` te gebruiken ipv `it()` (twee i's). Referentiemateriaal: Angular & service mocking: 1. http://docs.angularjs.org/guide/dev_guide.services.testing_services 2. http://docs.angularjs.org/api/ngMock.$httpBackend Jasmine 1. https://github.com/pivotal/jasmine/wiki/Spies Karma 1. https://github.com/angular/angular-seed/ 2. http://karma-runner.github.io/0.8/intro/configuration.html Node - config 1. https://npmjs.org/doc/config.html#proxy ``` npm config set proxy http://proxy.be:8080 npm config set https-proxy http://proxy.be:8080 ``` ### Integratie in maven ```xml org.codehaus.mojo exec-maven-plugin 1.2.1 jsunit test exec ${skipTests} 0 1 ${basedir}/src/test/javascript/build.bat ${basedir}/src/test/javascript ``` Bovenstaande `skip` config houdt dus ook rekening met bvb `mvn clean install -DskipTests` - de `test` phase van maven wordt **niet** geskipped maar de testen wel door de `maven-failsafe-plugin` - bijgevolg worden goals die aan de test fase hangen ook nog uitgevoerd. ```bash @echo off set PHANTOMJS_BIN=C:

dvl.home

prj

vitrine

tools

phantomjs

phantomjs.exe karma start --log-level=debug --single-run ``` :exclamation: Opgelet in **windows** met de paden, geen quotes gebruiken en dubbele backslashes wél gebruiken, anders werkt het niet en blijft karma hangen. ### Een voorbeeld conf file voor een Angular app ```javascript basePath = '.'; files = [ JASMINE, JASMINE_ADAPTER, '../../main/webapp/js/lib/jquery*.js', '../../main/webapp/js/lib/angular.min.js', '../../main/webapp/js/lib/angular-*.js', '../../main/webapp/js/**/*.js', 'lib/*.js', 'specs/*.js' ]; // Nodig voor Jenkins en in de build te integreren: singleRun ipv autoWatch autoWatch = true; //singleRun = true; browsers = ['PhantomJS']; reporters = ['dots', 'junit']; junitReporter = { outputFile: '../../../target/surefire-reports/be.vdab.vitrine.javascripts.xml', suite: 'unit' }; ```