3.8 KiB
+++ 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 version######"1.0" encoding"UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.ui.externaltools.ProgramLaunchConfigurationType">
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
<listEntry value="org.eclipse.ui.externaltools.launchGroup"/>
</listAttribute>
<stringAttribute key######"org.eclipse.ui.externaltools.ATTR_LOCATION" value"${workspace_loc:/vitrine/src/test/javascript/test.bat}"/>
<stringAttribute key######"org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value"${workspace_loc:/vitrine/src/test/javascript}"/>
</launchConfiguration>
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:
- http://docs.angularjs.org/guide/dev_guide.services.testing_services
- http://docs.angularjs.org/api/ngMock.$httpBackend
Jasmine
Karma
Node - config
npm config set proxy http://proxy.be:8080
npm config set https-proxy http://proxy.be:8080
Integratie in maven
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<id>jsunit</id>
<phase>test</phase>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<skip>${skipTests}</skip>
<successCodes>
<successCode>0</successCode>
<successCode>1</successCode><!-- on failing test, don't get a build
error -->
</successCodes>
<executable>${basedir}/src/test/javascript/build.bat</executable>
<workingDirectory>${basedir}/src/test/javascript</workingDirectory>
</configuration>
</plugin>
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.
@echo off
set PHANTOMJS_BIN=C:<br/><br/>dvl.home<br/><br/>prj<br/><br/>vitrine<br/><br/>tools<br/><br/>phantomjs<br/><br/>phantomjs.exe
karma start --log-level=debug --single-run
❗ 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
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'
};