Karma: ejecutar un solo archivo de prueba desde la línea de comandos

94

Entonces, he estado buscando esto por todas partes, encontré respuestas "similares" aquí, pero no exactamente lo que quiero.

Ahora mismo, si quiero probar un solo archivo con karma, tengo que hacerlo fit(), fdescribe()en el archivo en cuestión ...

Sin embargo, lo que sí quiero es poder llamar a karma, con el archivo de configuración, y dirigirlo a un archivo específico, por lo que no necesito modificar el archivo en absoluto, es decir:

karma run --conf karma.conf.js --file /path/to/specific/test_file.js

¿Es posible hacer esto? ¿O con algún ayudante? (usando gruñido o trago?)

Gonçalo Vieira
fuente
1
karma run -- --grep=testDescriptionFilter¿Lo intentaste ? He visto esto sugerido antes, pero no puedo verificar de primera mano que funcione. (Si estuviera en casa, lo intentaría antes de sugerir. Como no puedo, estoy comentando en lugar de responder) :)
bvaughn
1
¿No es eso solo para un específico it? ¿No hay posibilidad de utilizarlo para un archivo?
Gonçalo Vieira
3
Para ser honesto, siempre he modificado karma.conf si quiero centrarme en un solo archivo de prueba. Es bastante fácil de hacer que nunca me he esforzado en encontrar una forma más rápida.
bvaughn
1
Pancho. Me alegro de que haya ayudado. Al corriente. :)
bvaughn

Respuestas:

59

Primero necesitas iniciar karma server con

karma start

Luego, puede usar grep para filtrar una prueba específica o describir un bloque:

karma run -- --grep=testDescriptionFilter
bvaughn
fuente
12
Esta respuesta debería decir que debería haber karmaejecutado karma startantes de ejecutarkarma run
etagwerker
4
Realmente no creo que sea necesario, dado que la pregunta era sobre cómo filtrar karma run. Parecía bastante claro que el cartel sabía cómo iniciar Karma y ejecutar todas las pruebas y solo buscaba la sintaxis con respecto al filtrado.
bvaughn
2
¿Qué puedo hacer si quiero que esto suceda mediante programación? Es decir, no sabría la descripción del archivo que cambió, pero sabría su nombre de archivo.
MPV
3
Esta solución parece no funcionar en absoluto con las pruebas de jazmín (karma-jazmín). Y la ejecución de karma --help no muestra --grep como opción de comando en absoluto. Estoy usando Karma más reciente (dice 1.5.0).
Yavin5
11
¡esto no ejecuta una sola prueba!
Eav
16

Aunque --filesya no se admite, puede usar una variable env para proporcionar una lista de archivos:

// karma.conf.js
function getSpecs(specList) {
  if (specList) {
    return specList.split(',')
  } else {
    return ['**/*_spec.js'] // whatever your default glob is
  }
}

module.exports = function(config) {
  config.set({
    //...
    files: ['app.js'].concat(getSpecs(process.env.KARMA_SPECS))
  });
});

Luego en CLI:

$ env KARMA_SPECS="spec1.js,spec2.js" karma start karma.conf.js --single-run
Yuriy Kharchenko
fuente
1
¡Esto termina funcionando muy bien! Solo asegúrese de que su glob predeterminado tenga un nombre de directorio al frente, o de lo contrario obtendrá un error de patrón. Además, cambié mis archivos: definición como esta: archivos: [] .concat (getSpecs (process.env.KARMA_SPECS)), Y eso terminó funcionando mejor, porque la función ya coloca el patrón global allí si no hay una variable de entorno conjunto. Ah, y no creo que necesites el "env" en la parte frontal del comando (me funciona sin eso). ¡Gracias por esta solución @Yuriy Kharchenko!
Yavin5
6

Esta opción ya no se admite en versiones recientes de karma:

ver https://github.com/karma-runner/karma/issues/1731#issuecomment-174227054

La matriz de archivos se puede redefinir utilizando la CLI como tal:

karma start --files=Array("test/Spec/services/myServiceSpec.js")

o escapó:

karma start --files=Array\(\"test/Spec/services/myServiceSpec.js\"\)

Referencias

Paul Sweatte
fuente
2
me da este error - bash: error de sintaxis cerca del token inesperado `('
Lakshay
5
entonces, cuando intento esto, obtengo el siguiente error:, config.files = config.files.map(createPatternObject).map(createPatternMapper(basePathResolve))que podría deberse al hecho de que estoy usando requireJS
Gonçalo Vieira
1
erm, no por requireJS, por alguna extraña razón karma no está leyendo Array ("zzz") como si fuera un JS Array? O_o
Gonçalo Vieira
2
nm, parece que karma ya no admite un --files arg?
Gonçalo Vieira
23
Advertencia para todos los que vengan aquí, esta opción ya no es compatible con karma: github.com/karma-runner/karma/issues/…
dignifiedquire