gruntjs - Pruebas de Typescript, con Karma, Jasmine y Grunt
He estado intentando usar Karma+Jasmine para ejecutar pruebas escritas en TypeScript.
Buscando en línea, parece que bastantes han logrado tal hazaña, pero no pude encontrar una guía completa sobre cómo hacerlo. El entorno:
- Typescript usando módulos ES6
- Karma
- Jazmín
- Gruñido
¿Cómo se configura todo el asunto?
Respuesta #1
Consulta este repositorio de GitHub para el código fuente completo.
package.json
Comencemos con devDependencies:
"devDependencies": {
"grunt": "^0.4.5",
"grunt-contrib-watch": "^0.6.1",
"grunt-karma": "^0.12.1",
"grunt-ts": "^5.1.0",
"jasmine-core": "^2.3.4",
"karma": "^0.13.15",
"karma-jasmine": "^0.3.6",
"karma-phantomjs-launcher": "^0.2.1",
"karma-requirejs": "^0.2.3",
"load-grunt-tasks": "^3.3.0",
"phantomjs": "^1.9.18",
"requirejs": "^2.1.22"
}
Gruntfile.js
Reloj
Observamos todos los archivos .ts, y al cambiar, primero los transpilamos, luego ejecutamos las pruebas:
watch: {
typescript: {
// Watching all typescript files (specs and units)
files: [ 'source/**/*.ts' ],
// First transpile, then run tests
tasks: [ 'ts:default', 'karma:continuous:run' ],
options: {
spawn: false
}
}
},
Compilación de Typescript
Transpilamos todos los archivos .ts usando el módulo amd. Ten en cuenta que necesitamos las tipificaciones de jasmine:
ts: {
default: {
src: [
// Note that we add the typings for jasmine here
'typings/jasmine.d.ts',
// We compile all .ts files (specs and units)
'source/**/*.ts'
],
options: {
// We need to convert ES6 to ES5 and use amd so it works
// with RequireJS
module: 'amd',
fast: 'never'
},
// We output all files to a temp folder
outDir: 'transpiled'
}
},
Karma
Una vez que todos los archivos .ts estén en la carpeta transpiled, podemos ejecutar las pruebas de Karma:
karma: {
options: {
configFile: 'karma.conf.js'
},
continuous: {
logLevel: 'INFO',
singleRun: false,
}
}
karma.conf.js
La parte más complicada:
- Añadimos
requirejscomo un framework. - Cargamos todos los archivos transpilados, pero con el indicador
includeestablecido en falso. - Un archivo llamado
test-main.jsluego escanea estos archivos y carga dinámicamente todos los archivos.specpara las pruebas.test-main.jsfue generado por Karma, consulta esta guía para más información.
Así:
module.exports = function(config) {
config.set({
// Note that we also use `requirejs`
frameworks: [ 'jasmine', 'requirejs' ],
files: [
// We add all transpiled files (specs and unit) with included set
// to false.
{ pattern: 'transpiled/**/*.js', included: false },
// Test main will search the files for specs and load them
// dynamically.
'test-main.js'
],
reporters: [ 'progress' ],
browsers: [ 'PhantomJS' ],
autoWatch: false,
singleRun: true
})
}
Respuesta #2
Echa un vistazo a usar el preprocesador karma-typescript, lo cual podría ser un poco más fácil que ver, compilar y luego ejecutar las pruebas.
Esto se puede configurar bastante fácilmente en tus configuraciones de karma y/o grunt.
