+++
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'
};
```