ホームページ > 記事 > ウェブフロントエンド > Node.js を使用して関数テストの実装方法_JavaScript スキルを実行する
情報
先週の会議で、同僚は現在 Java を使用して関数テストを作成していると述べましたが、その結果、冗長なコードが大量に生成され、プロジェクト全体が肥大化してきました。ここで、機能テストを迅速に構築するための単純なテンプレート プロジェクトが緊急に必要です。
後で戻って考えてみましたが、なぜ関数テストを行うのに Java を使用する必要があるのでしょうか?
Node.js は良い選択であり、json を自然にサポートしているため、github に戻って検索したところ、確かに関連プロジェクト testosterone があったので、このブログを思いつきました。
サーバー
デモを実行するには、それをサポートする対応するサーバーが必要になるのは当然です。
ここではサーバーとして Express を選択します。
まず、サーバー フォルダーを作成し、新しい package.json を作成します。
次にコマンドを実行します
Express がインストールされました。
実験用にいくつかの単純な get post メソッドを実装します
app.use(express.bodyParser());
app.get('/hello', function(req, res) {
res.send("hello world");
});
app.get('/ ', function (req, res) {
setTimeout(function () {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end() ;
}, 200);
});
app.get('/hi', function (req, res) {
if (req.param('hello') !== 未定義) {
res.writeHead(200, {'Content -Type': 'text/plain'});
res.end('Hello!');
} else {
res.writeHead(500, {'Content-Type': 'text/プレーン'});
res.end('代わりに投稿を使用');
}
});
app.post('/hi', function (req, res) {
setTimeout(function () {
res.writeHead(200, {'Content-Type': 'text/plain'} );
res.end(req.param('メッセージ') || 'メッセージ');
}, 100);
});
app.get('/user', function(req, res) {
res.send(
[
{name:'jack'},
{name: 'トム'}
]
);
});
app.get('/user/:id', function(req, res) {
res.send({
id: 1,
name: "node js",
説明: "私はノード js"
});
});
app.post('/user/edit', function (req, res) {
setTimeout(function () {
res.send({
id:req.param('id' ),
status:1
});
}, 100);
});
app.listen(3000);
console.log('ポート 3000 でリッスンしています...');
テストステロン
サーバーをセットアップしたら、当然のことながらテストを開始します。
このプロジェクトのインターフェースは非常に洗練された名前が付けられており、コードに直接ロードできます。
まず、基本的な関数をテストします
テストステロン
.get('/hello',function(res){
assert.equal(res.statusCode, 200);
})
.get('/hi',function(res){
assert.equal(res.statusCode, 500);
})
.post('/hi', {data: {message: 'hola'}}, {
status: 200
,body: 'hola'
});
次に、上でシミュレートしたユーザーの投稿の取得に対して簡単なテストを実行します。
テストステロン
.get('/user', function (res) {
var ExpectRes = [
{name:'jack'},
{name:'tom'}
];
assert.equal(res.statusCode, 200);
assert.equal(JSON.stringify(JSON.parse(res.body)),JSON.stringify(expectRes));
})
.get('/user/1', function (res) {
var user = JSON.parse(res.body);
assert.equal(res.statusCode, 200);
assert.equal(user.name, "node js");
assert.equal(user.description, "私はnode js");
})
次に、give when then を使用して各テスト ケースを記述したい場合は、次のようにすることができます:
testosterone
.add(
'/user/{id} n にユーザー ID を与える'
'応答 user n がある場合'
'THEN はユーザー json を返すはずです',
function (cb) {
testosterone.get('/user/1', cb(function (res) {
var ExpectRes = {
id: 1,
name: "node js",
説明: "私はノード js"
};
assert.equal(res.statusCode, 200);
assert.equal(JSON.stringify(JSON.parse(res.body)), JSON.stringify(expectRes));
}));
})
.add(
'ユーザー情報を /user/edit n に POST したとき'
'検索の変更が成功したとき n'
'THEN はステータス 1 を返すはずです',
function (cb) {
testosterone.post('/user/edit', {data: {id: 1, name: "名前変更"}}, cb(function (res) {
var res = JSON.parse(res.body);
assert.equal(res.status, 1);
}));
}
)
.run(function () {
require('sys').print('done!');
});
結論
上記のコードを通して、testosterone は Java の長い http ヘッダー設定よりも実際にはるかに単純で洗練されていることがわかります。