with unit test node karma example javascript karma-runner jasmine-node

javascript - unit - karma-jasmine



Pruebas de jazmín en karma: Referencia no detectada Error: no está definido (7)

Karma no puede reconocer la declaración de ''requerimiento'' en el archivo JSFileSpec.js. Ejecutando karma.conf.js:

(function() { describe("DummyEmitter creation", function(){ return it("creation", function(){ var DummyEmitter = require(''Util.DummyEmitter''); var dummy = new DummyEmitter(''someName''); return expect(dummy).toBeDefined(); }); }); })();

ReferenceError: require no está definido


Hoy he encontrado un problema similar. En mi caso la solución fue bastante simple. Estoy usando Babel a través de Webpack para procesar archivos .jsx. Los archivos con la extensión .jsx se probaron con éxito, mientras que los archivos .js simples arrojaron un error de referencia.

Si alguien tiene una configuración similar o equivalente, pueden compartir la misma solución.

En karma.config.js tuve que especificar preprocesadores para archivos .js como lo hice para los archivos .jsx. Aquí hay un ejemplo:

preprocessors: { "app/tests/**/*.test.jsx": ["webpack", "sourcemap"], "app/tests/**/*.test.js": ["webpack", "sourcemap"] },

Será mejor que agregue que, en mi caso, Webpack pasa el código a Babel para que lo compile para que pueda ejecutarse en el navegador. Puedo copiar y pegar todo el webpack.config.js y karma.config.js si alguien los necesita.


Karma es un corredor de prueba que ejecuta tus pruebas en un navegador . Cualquiera que sea el navegador que configures, no sabes cuál es la función requerida.

Para usar jasmine con nodo prueba jasmine-node. https://github.com/mhevery/jasmine-node

Para que el karma ejecute las pruebas del nodo jazmín, intente (espérelo ....) jazmín-nodo-karma. https://npmjs.org/package/jasmine-node-karma

Aquí están las páginas wiki de jazmín donde encontré la información anterior. https://github.com/pivotal/jasmine/wiki

Espero que esto ayude.


Me enfrentaba al mismo problema, cuando intentaba usar require(''module_name'') (módulos de estilo CommonJS) dentro de un caso de prueba y ejecutándolo con Karma.

La razón por la que se require función no está disponible para el navegador (no está undefined ). Para proporcionarlo al navegador, podemos examinar los archivos de prueba js antes de que Karma ejecute el caso de prueba en el navegador utilizando karma-browserify .

Instale karma-browserify utilizando npm install karma-browserify --save-dev

Actualizar karma.conf.js

frameworks: [''jasmine'', ''browserify''], preprocessors: { ''app/tests/*.js'': [ ''browserify'' ] }, plugins: [..., ''karma-browserify''],

Después de estos cambios, el archivo browserificado se ejecuta en el navegador por Karma, en el que se define el require , y el caso de prueba se ejecuta correctamente


Puede que estés usando un patrón global que está recogiendo cosas dentro del directorio bin de karma. Intente ejecutar sus pruebas utilizando rutas absolutas para ver si eso lo corrige.

Si es así, entonces sabes que tu patrón global está agarrando cosas que no querías.

Por ejemplo cambio

{pattern: ''**/**/*_test.js''},

a

{pattern: ''stuff/dashboard/home-page_test.js''},

A ver si eso soluciona tu problema.


Si alguien aún no puede resolver con las soluciones anteriores, esto es lo que me ayudó. hilo agregar browserify y watchify


Yo uso webpack para ese propósito. Publiqué mi configuración en npm para ahorrar mi tiempo para los proyectos futuros. Simplemente ejecute npm install webpack-karma-jasmine , y cree archivos de configuración para webpack y karma como se describe en los documentos: https://www.npmjs.com/package/webpack-karma-jasmine


module.exports = function(config) { config.set({ basePath: '''', frameworks: [''mocha'', ''chai''], files: [ ''test/*.test.js'' ], exclude: [ ], preprocessors: { ''test/*.test.js'': [''webpack''] }, webpack: { mode: "none", module: { rules: [ { test: //.js?$/, loader: "babel-loader", options: { presets: ["env"] }, } ] } }, reporters: [''progress''], port: 9876, colors: true, logLevel: config.LOG_INFO, autoWatch: true, browsers: [''Chrome''], singleRun: false, concurrency: Infinity, browserNoActivityTimeout: 100000 }) }

usar webpack