ReferenceError: description não está definido NodeJs

160

Estou tentando definir alguns pontos de extremidade e fazer um teste usando nodejs. Em server.jseu tenho:

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);

e em func1.js:

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

Agora test.js, estou tentando usar este ponto de extremidade:

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();
                });
        });
});

Mas quando executo node test.js, estou recebendo este erro:

descreva ('Conta', função () {
^

ReferenceError: description não está definido
    no objeto. (/test/test.js:9:1)
    em Module._compile (module.js: 456: 26)
    em Object.Module._extensions..js (module.js: 474: 10)
    em Module.load (module.js: 356: 32)
    em Function.Module._load (module.js: 312: 12)
    em Function.Module.runMain (module.js: 497: 10)
    na inicialização (node.js: 119: 16)
    em node.js: 906: 3

Como posso corrigir o problema?

N34
fonte
1
O que você espera describe()ser e onde é definido? Ao examinar seu arquivo test.js, não há símbolo describeque está sendo definido lá.
jfriend00
1
Descrição () faz parte do Jasmine.
Keith Tyler
1
A lacuna na documentação que levou a essa pergunta foi corrigida em novembro de 2016 , mas provavelmente só chegou ao site recentemente com o lançamento da versão 4.1.0.
devius 21/01

Respostas:

197

Supondo que você esteja testando via mocha, você deve executar seus testes usando o mochacomando em vez do nodeexecutável.

Portanto, se você ainda não o fez, verifique se sim npm install mocha -g. Em seguida, basta executar mochano diretório raiz do seu projeto.

mscdex
fonte
16
E se eu quiser disponibilizar as funções mocha para o nó?
abhisekp 8/09/2015
12
Os documentos do mocha no mochajs.org falham singularmente em mencionar isso ...
Richard Ev
3
não há necessidade de mocha global de instalar, basta usar "test": "./node_modules/.bin/mocha -V"na seção de scripts de package.json e instalar mocha como mais uma dependência
Lukas Liesis
2
@LukasLiesis nenhuma necessidade para ./node_modules/.bin, esse caminho já está carregado quando você usa npm runou yarn, tão só "teste": "mocha -V" será suficiente
Felipe Sabino
@FelipeSabino obrigado por mostrar isso, mas quando você tem apenas mocha -Vnão está claro se ele foi carregado a partir global ou local é por isso que ainda preferem mostrar o caminho, mesmo que não é exigido pelo sistema
Lukas Liesis
133

se você estiver usando o vscode, deseja depurar seus arquivos

Eu usei tddantes, jogouReferenceError: describe is not defined

Mas, quando eu uso bdd, funciona!

desperdice meio dia para resolvê-lo ....

    {
      "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
fonte
Uau! vendo isso depois de resolver o problema.
Nonybrighto 13/05/19
Obrigado! Economizou muito tempo!
Brad W
Isso também é verdade para o WebStorm (o que é estranho)
yentsun 7/07/19
4
Obrigado pela resposta, fez tudo funcionar !! Como isso funciona? Como mudar tdd para bdd corrige o problema?
TedTran2019
6
bdd vs tdd é o 'estilo de teste' passado ao mocha por meio de argumentos de comando, bdd é o padrão, mas o modelo gerado vscode usa tdd. Você provavelmente está usando o bdd, pois a maioria dos guias de introdução usa o bdd. Por que o vscode usa tdd como padrão, quando bdd é o padrão, está além de mim.
Ryan The Leach
47

Para executar testes com o nó / npm sem instalar o Mocha globalmente, você pode fazer o seguinte:

• Instale o Mocha localmente no seu projeto ( npm install mocha --save-dev)

• Opcionalmente, instale uma biblioteca de asserções ( npm install chai --save-dev)

• No seu package.json, adicione uma seção scriptse direcione o binário mocha

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

Coloque seus arquivos de especificação em um diretório nomeado /testem seu diretório raiz

• Nos seus arquivos de especificação, importe a biblioteca de asserções

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

• Você não precisa importar mocha, executar mocha.setupou chamarmocha.run()

• Em seguida, execute o script na raiz do seu projeto:

npm test
cantera
fonte
7
Na sua linha de teste, você não precisa mais apontar para a pasta mocha bin, basta colocar mocha, ela funcionará.
Adrian Lynch
1
Se você deseja que este comando execute todos os testes no diretório '/ test', incluindo os subdiretórios, coloquemocha --recursive
Luke Gallione 3/17/17
1
@AdrianLynch: Faz dois anos, mas algo está diferente ou mudou. Nada demais, mas talvez ajude alguém. Estou no Windows 10 com o Mocha 4.01 instalado globalmente. Eu tenho que apontar para mocha \ bin \ mocha, como diz a nota do cantera.
BaldEagle
Para que eu trabalhasse, tinha que incluir a pasta de destino da seguinte maneira:{"scripts": { "test": "node ./node_modules/mocha/bin/mocha --recursive test" }}
Alwin Kesler
22

Você também pode fazer assim:

  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)
    })
  })

Referência: http://mochajs.org/#require

subhojit777
fonte
Na ref> A interface de requisição não pode ser executada através do nó executável e deve ser executada via mocha. A pergunta é sobre a execução via nó.
eighteyes
1
Estou escrevendo mais tarde e tendo uma experiência diferente. Caso isso ajude alguém ... Estou no Windows 10 com o mocha 4.01 e o chai 4.1.2 instalados globalmente. Não preciso das três primeiras variáveis ​​aqui; Eu preciso do quarto. @eighteyes: Não encontrei como executar o Mocha diretamente. Estou executando através do "nó <caminho completo para mocha \ bin \ mocha> <caminho relativo para o arquivo de teste>".
BaldEagle
1
var mocha = require('mocha') var describe = mocha.describe var it = mocha.itisso é realmente redundante. Você pode var {describe, it} = require('mocha')com a atribuição de desestruturação do
#
6

Eu tenho esse erro ao usar "--ui tdd". remova isso ou use o problema de correção "--ui bdd".

GraySe7en
fonte
5

OP perguntou sobre a execução de nodenão de mocha. Este é um caso de uso muito comum, consulte Usando o Mocha programaticamente

É isso que o injetado descreve e faz nos meus testes.

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

Eu tentei tddcomo nos documentos, mas isso não funcionou, mas o bdd funcionou.

dezoito anos
fonte
Muito obrigado! Embora eu saiba que describesó está disponível com o BDD e não está disponível para o 'TDD', de alguma forma no script de instalação, usei o TDD e fiquei pensando que configurava como 'BDD'. A pesquisa na Internet não ajuda em nada, pois minha percepção era de que fiz a configuração correta (BDD), mas ainda assim recebo um erro. É apenas a sua solução (que é única em relação a outras soluções encontradas nos resultados de pesquisa na Internet) me fez adicionar código adicional que substituiu minha configuração errada e finalmente funcionou. É somente durante outra instalação, eu vi meu erro de digitação e depois de corrigi-lo para 'BDD', o código acima não era necessário.
VanagaS 13/09/19