スタンドアロンのJavascriptコードを開発する方法を理解しようとしています。コマンドラインから実行しているテストやモジュールでJavscriptコードを記述したいと思います。そこで、node.js
とnpm
をライブラリrequirejs
,underscore
、およびmocha
と一緒にインストールしました。RequireJSでMochaテストを実行しているときに「定義されていません」と表示されるのはなぜですか?
私のディレクトリ構造は次のようになります。
src/utils.js
は、私は次のコードを使用して、書いています少しモジュールである
> tree .
.
├── node_modules
├── src
│ └── utils.js
└── test
└── utils.js
:
:> cat src/utils.js
define(['underscore'], function() {
"use strict";
if ('function' !== typeof Object.beget) {
Object.beget = function (o) {
var f = function() {
};
f.prototype = o;
return new f();
};
}
});
とtest/utils.js
はテストです
私はトップレベルのディレクトリから実行しようとします(そうmocha
はtest
ディレクトリを見て):
> mocha
node.js:201
throw e; // process.nextTick error, or 'error' event on first tick
^
Error: Calling node's require("../src/utils") failed with error: ReferenceError: define is not defined
at /.../node_modules/requirejs/bin/r.js:2276:27
at Function.execCb (/.../node_modules/requirejs/bin/r.js:1872:25)
at execManager (/.../node_modules/requirejs/bin/r.js:541:31)
...
は、だから私の質問は以下のとおりです。
- これはコードを構造化するための正しい方法は何ですか?
- テストが実行されないのはなぜですか?
- この種のことを学ぶ最も良い方法は何ですか?私はGoogleで良い例を見つけるのに苦労しています。
おかげで...
[申し訳ありません - 一時的に間違ったコードからの結果を掲載。今すぐ固定]
PS私はrequirejsを使用しています。私はこのコード(またはその一部)をブラウザから実行したいからです。
更新/ソリューション
以下の回答ではない何かが、私は上記の試験スタイルにmocha -u tdd
を使用するために必要なことです。ここでは、最終的な(もアサートが必要です)テストおよびその使用である:私はrequirejs
を使用していない
> cat test/utils.js
var requirejs = require('requirejs');
requirejs.config({nodeRequire: require});
requirejs(['../src/utils', 'assert'], function(utils, assert) {
suite('utils', function() {
test('should always work', function() {
assert.equal(1, 1);
})
})
});
> mocha -u tdd
.
✔ 1 tests complete (1ms)
amdefineモジュールをインストールして、これらの行を追加する必要があります。if(typeof define!= 'function')<< = into (テストファイルではなく)動作させるために私の 'class'ファイル。これはテスト後にこれを削除するタスクがある必要があるので、迷惑なのです – devric