ReferenceError: describe no está definido NodeJs

160

Estoy tratando de definir algunos puntos finales y hacer una prueba usando nodejs. En server.jstengo:

var express = require('express');
var func1 = require('./func1.js');
var port = 8080;
var server = express();

server.configure(function(){
  server.use(express.bodyParser());
});

server.post('/testend/', func1.testend);

y en func1.js:

    var testend = function(req, res) {
           serialPort.write("1", function(err, results) {
           serialPort.write("2" + "\n", function(err, results) {
           });
      });
   });
    exports.testend = testend;

Ahora test.jsestoy tratando de usar este punto final:

var should = require('should');
var assert = require('assert');
var request = require('supertest');
var http = require('http');
var app = require('./../server.js');
var port = 8080;

describe('Account', function() {
        var url = "http://localhost:" + port.toString();
        it('test starts', function(done) {
                request(url).post('/testend/')
                // end handles the response
                .end(function(err, res) {
                        if (err) {
                                throw err;
                        }
                        res.body.error.should.type('string');
                        done();
                });
        });
});

Pero cuando ejecuto node test.jsme sale este error:

describe ('Cuenta', función () {
^

ReferenceError: describe no está definido
    en el objeto (/test/test.js:9:1)
    en Module._compile (module.js: 456: 26)
    en Object.Module._extensions..js (module.js: 474: 10)
    en Module.load (module.js: 356: 32)
    en Function.Module._load (module.js: 312: 12)
    en Function.Module.runMain (module.js: 497: 10)
    al inicio (node.js: 119: 16)
    en node.js: 906: 3

¿Cómo puedo solucionar el problema?

N34
fuente
1
¿Qué esperas describe()que sea y dónde se define? Al mirar su archivo test.js, no hay ningún símbolo describeque se defina allí.
jfriend00
1
describe () es parte de Jasmine.
Keith Tyler
1
La brecha de documentación que condujo a esta pregunta se solucionó en noviembre de 2016 , pero probablemente solo llegó al sitio web recientemente con el lanzamiento de la versión 4.1.0.
devius

Respuestas:

197

Suponiendo que está probando a través de mocha, debe ejecutar sus pruebas utilizando el mochacomando en lugar del nodeejecutable.

Entonces, si aún no lo ha hecho, asegúrese de hacerlo npm install mocha -g. Luego, simplemente ejecute mochaen el directorio raíz de su proyecto.

mscdex
fuente
16
¿Qué sucede si quiero que las funciones de mocha estén disponibles para el nodo?
abhisekp
12
Los documentos de mocha en mochajs.org singularmente no mencionan esto ...
Richard Ev
3
no es necesario instalar mocha global, solo use "test": "./node_modules/.bin/mocha -V"en la sección de scripts de package.json e instale mocha como una dependencia más
Lukas Liesis
2
@LukasLiesis no es necesario ./node_modules/.bin, esta ruta ya está cargada cuando la usas npm runo yarn, así que solo "prueba": "mocha -V" será suficiente
Felipe Sabino
@FelipeSabino, gracias por señalar esto, pero cuando mocha -Vno está claro si se cargó desde global o local, es por eso que todavía prefiero mostrar la ruta, incluso si el sistema no lo requiere
Lukas Liesis
133

si está usando vscode, desea depurar sus archivos

Solía tddantes, arrojaReferenceError: describe is not defined

Pero, cuando lo uso bdd, ¡funciona!

perder medio día para resolverlo ...

    {
      "type": "node",
      "request": "launch",
      "name": "Mocha Tests",
      "program": "${workspaceFolder}/node_modules/mocha/bin/_mocha",
      "args": [
        "-u",
        "bdd",// set to bdd, not tdd
        "--timeout",
        "999999",
        "--colors",
        "${workspaceFolder}/test/**/*.js"
      ],
      "internalConsoleOptions": "openOnSessionStart"
},
caramelo
fuente
¡Guauu! viendo esto después de resolver el problema.
nonybrighto
¡Gracias! ¡Me ahorro mucho tiempo!
Brad W
Esto también es cierto para WebStorm (lo cual es extraño)
yentsun
44
¡Gracias por la respuesta, hizo que todo funcionara! ¿Cómo funciona esto? ¿Cómo se soluciona el problema cambiando tdd a bdd?
TedTran2019
66
bdd vs tdd es el 'estilo de prueba' que se pasa a mocha mediante argumentos de comando, bdd es el predeterminado, pero la plantilla generada por vscode usa tdd. Probablemente esté usando bdd, ya que la mayoría de las guías de inicio usan bdd. Por qué vscode usa tdd como predeterminado, cuando bdd es el predeterminado, está más allá de mí.
Ryan The Leach
47

Para ejecutar pruebas con nodo / npm sin instalar Mocha globalmente, puede hacer esto:

• Instale Mocha localmente en su proyecto ( npm install mocha --save-dev)

• Opcionalmente, instale una biblioteca de aserciones ( npm install chai --save-dev)

• En su package.json, agregue una sección para scriptsy apunte al binario mocha

"scripts": {
  "test": "node ./node_modules/mocha/bin/mocha"
}

• Coloque sus archivos de especificaciones en un directorio nombrado /testen su directorio raíz

• En sus archivos de especificaciones, importe la biblioteca de aserciones

var expect = require('chai').expect;

• No es necesario importar mocha, ejecutar mocha.setupo llamarmocha.run()

• Luego ejecute el script desde la raíz de su proyecto:

npm test
cantera
fuente
77
En su línea de prueba, ya no tiene que apuntar a la carpeta bin de mocha, solo ponga mocha, funcionará.
Adrian Lynch
1
Si desea que este comando ejecute todas las pruebas en el directorio '/ test', incluidos los subdirectorios, coloquemocha --recursive
Luke Gallione el
1
@AdrianLynch: Han pasado dos años, pero algo es diferente o ha cambiado. No es gran cosa, pero tal vez ayude a alguien. Estoy en Windows 10 con Mocha 4.01 instalado a nivel mundial. Tengo que señalar mocha \ bin \ mocha, como dice la nota de cantera.
BaldEagle
Para que yo trabajara tenía que incluir la carpeta de destino de esta manera:{"scripts": { "test": "node ./node_modules/mocha/bin/mocha --recursive test" }}
Alwin Kesler
22

También puedes hacer así:

  var mocha = require('mocha')
  var describe = mocha.describe
  var it = mocha.it
  var assert = require('chai').assert

  describe('#indexOf()', function() {
    it('should return -1 when not present', function() {
      assert.equal([1,2,3].indexOf(4), -1)
    })
  })

Referencia: http://mochajs.org/#require

subhojit777
fuente
Desde ref> La interfaz require no puede ejecutarse a través del nodo ejecutable, y debe ejecutarse a través de mocha. La pregunta es acerca de la ejecución a través del nodo.
eighteyes
1
Estoy escribiendo más tarde y tengo una experiencia diferente. En caso de que ayude a alguien ... Estoy en Windows 10 con mocha 4.01 y chai 4.1.2 instalado globalmente. No necesito las primeras tres variables aquí; Necesito el cuarto. @eighteyes: No he encontrado cómo ejecutar Mocha directamente. Estoy ejecutando a través de "nodo <ruta completa a mocha \ bin \ mocha> <ruta relativa al archivo de prueba>".
BaldEagle
1
var mocha = require('mocha') var describe = mocha.describe var it = mocha.itEsto es realmente redundante. Puede var {describe, it} = require('mocha')con ES6 asignación desestructurada
user5532169
6

Tengo este error cuando uso "--ui tdd". eliminar esto o usar el problema de solución "--ui bdd".

GraySe7en
fuente
5

OP preguntó acerca de correr desde nodeno desde mocha. Este es un caso de uso muy común, consulte Uso de Mocha de forma programada

Esto es lo que inyecté y lo describí en mis pruebas.

mocha.ui('bdd').run(function (failures) {
    process.on('exit', function () {
      process.exit(failures);
    });
  });

Lo intenté tddcomo en los documentos, pero eso no funcionó, aunque bdd funcionó.

ochenta ojos
fuente
¡Muchas gracias! Si bien soy consciente de que describesolo está disponible con BDD y no está disponible para 'TDD', de alguna manera en el script de configuración, usé TDD y seguí pensando que lo configuré como 'BDD'. La búsqueda en Internet no es de ayuda, ya que mi percepción era que hice la configuración correcta (BDD), pero aún así recibo un error. Es solo su solución, (que es única de cualquier otra solución que se encuentre en los resultados de búsqueda de Internet) me hizo agregar código adicional que anuló mi configuración incorrecta y finalmente funcionó. Es solo durante la configuración de otra configuración, vi mi error tipográfico y después de corregirlo a 'BDD', no se requirió el código anterior.
VanagaS