いくつかのエンドポイントを定義してnodejs
を使用してテストしようとしています。 server.js
には、
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);
そしてfunc1.js
では:
var testend = function(req, res) {
serialPort.write("1", function(err, results) {
serialPort.write("2" + "\n", function(err, results) {
});
});
});
exports.testend = testend;
今test.js
で私はこのエンドポイントを使用しようとしています:
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();
});
});
});
しかし、node test.js
を実行すると、このエラーが発生します。
[.____。describe( 'Account'、function(){ ^ 参照エラー:describeはObjectで定義されていません 。 .js:9:1) Module._compile(module.js:456:26) Object.Module._extensions..js(module.js:474:10) Module.load(module.js:356:32) Function.Module._load(module.js:312:12) at Function.Module.runMain(module) js:497:10) 起動時(node.js:119:16) node.js:906:3
どうすれば問題を解決できますか?
mocha
でテストしているとすると、実行可能ファイルmocha
の代わりにnode
コマンドを使用してテストを実行する必要があります。
ですから、まだ行っていなければ、必ずnpm install mocha -g
を実行してください。その後、プロジェクトのルートディレクトリでmocha
を実行してください。
Mochaをグローバルにインストールせずにnode/npmでテストを実行するには、次のようにします。
•Mochaをプロジェクトにローカルにインストールします(npm install mocha --save-dev
)
•オプションで、アサーションライブラリをインストールします(npm install chai --save-dev
)
•package.json
で、scripts
のセクションを追加し、mochaバイナリをターゲットにします
"scripts": {
"test": "node ./node_modules/mocha/bin/mocha"
}
•ルートディレクトリの/test
という名前のディレクトリにspecファイルを配置します
•specファイルで、アサーションライブラリをインポートします
var expect = require('chai').expect;
•しない mochaをインポートするか、mocha.setup
を実行するか、mocha.run()
を呼び出す必要があります
•次に、プロジェクトルートからスクリプトを実行します。
npm test
vscodeを使っているなら、ファイルをデバッグしたい
私は以前にtdd
を使用しました、それはReferenceError: describe is not defined
を投げます
しかし、bdd
を使用すると、うまくいきます。
それを解決するために半日無駄に....
{
"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"
},
次のようにすることもできます。
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)
})
})
OPはnode
からではなくmocha
からの実行について質問しました。これは非常に一般的な使用例です。 Mochaをプログラム的に使用する を参照してください。
これが記述されたものであり、それを私のテストに取り入れました。
mocha.ui('bdd').run(function (failures) {
process.on('exit', function () {
process.exit(failures);
});
});
私はドキュメントのようにtdd
を試しましたが、それはうまくいきませんでした、bddはうまくいきました。
「--ui tdd」を使用するとこのエラーが発生します。これを削除するか、「-ui bdd」を使用して問題を修正します。