I am trying to define some endpoints and do a test using nodejs
. In server.js
I have:
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);
and in func1.js
:
var testend = function(req, res) {
serialPort.write("1", function(err, results) {
serialPort.write("2" + "\n", function(err, results) {
});
});
});
exports.testend = testend;
Now in test.js
I am trying to use this endpoint:
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();
});
});
});
But when I run node test.js
I am getting this error:
describe('Account', function() { ^ ReferenceError: describe is not defined at Object. (/test/test.js:9:1) at Module._compile (module.js:456:26) at Object.Module._extensions..js (module.js:474:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Function.Module.runMain (module.js:497:10) at startup (node.js:119:16) at node.js:906:3
How can I fix the issue?
describe()
to be and where is it defined? In looking at your test.js file, there is no symbol describe
that is being defined there.
Assuming you are testing via mocha
, you have to run your tests using the mocha
command instead of the node
executable.
So if you haven't already, make sure you do npm install mocha -g
. Then just run mocha
in your project's root directory.
if you are using vscode, want to debug your files
I used tdd
before, it throw ReferenceError: describe is not defined
But, when I use bdd
, it works!
waste half day to solve it....
{
"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"
},
To run tests with node/npm without installing Mocha globally, you can do this:
• Install Mocha locally to your project (npm install mocha --save-dev
)
• Optionally install an assertion library (npm install chai --save-dev
)
• In your package.json
, add a section for scripts
and target the mocha binary
"scripts": {
"test": "node ./node_modules/mocha/bin/mocha"
}
• Put your spec files in a directory named /test
in your root directory
• In your spec files, import the assertion library
var expect = require('chai').expect;
• You don't need to import mocha, run mocha.setup
, or call mocha.run()
• Then run the script from your project root:
npm test
mocha
, it'll work.
mocha --recursive
{"scripts": { "test": "node ./node_modules/mocha/bin/mocha --recursive test" }}
You can also do like this:
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)
})
})
Reference: http://mochajs.org/#require
var mocha = require('mocha') var describe = mocha.describe var it = mocha.it
this is actually redundant. You can var {describe, it} = require('mocha')
with ES6 destructuring assignment
i have this error when using "--ui tdd". remove this or using "--ui bdd" fix problem.
OP asked about running from node
not from mocha
. This is a very common use case, see Using Mocha Programatically
This is what injected describe and it into my tests.
mocha.ui('bdd').run(function (failures) {
process.on('exit', function () {
process.exit(failures);
});
});
I tried tdd
like in the docs, but that didn't work, bdd worked though.
describe
is only available with BDD and not available for 'TDD', somehow in the setup script, I used TDD & kept thinking that I configured as 'BDD'. Internet search is of no help, as my perception was that, I did correct setup (BDD), but still I get error. It's only your solution, (which is unique from any other solutions found on Internet search results) made me add additional code that overrode my wrong setting and finally worked. Its only during other configuration setup, I saw my typo & after correcting it to 'BDD', above code was not required.
for Jest you have to add "jest": true
to .eslintrc
{
"env": {
"browser": true,
"es6": true,
"jest": true
},
...
Make sure you have a folder named as test that contains your test.js file.
Also make sure you have mocha available in your project by running mocha -version in terminal (at project path)
Make sure your project has package.json available, if not run npm init -y
And finally to run mocha test scripts, on terminal (on project path) run npm test
Success story sharing
"test": "./node_modules/.bin/mocha -V"
in scripts section of package.json and install mocha as one more dependency./node_modules/.bin
, this path is already loaded when you usenpm run
oryarn
, so just "test": "mocha -V" will sufficemocha -V
it's not clear if it was loaded from global or local that's why i still prefer to show the path even if it's not required by the system