接線がthis questionの場合、実際にHTTPを経由せずにExpress Routerをトリガーする方法があるかどうか確認したいと思いますか?"偽の"要求を持つコードから直接Express Routerを呼び出すことはできますか?
答えて
ルータには、要求、応答、およびコールバックを受け入れる"private" method named handle
があります。 Expressが持っているRouterのテストを見ることができます。一つの例は次のとおりです。
it('should support .use of other routers', function(done){
var router = new Router();
var another = new Router();
another.get('/bar', function(req, res){
res.end();
});
router.use('/foo', another);
router.handle({ url: '/foo/bar', method: 'GET' }, { end: done });
});
エクスプレスチームはRouterに統合テストを実行するためにSuperTestを使用しています。 SuperTestはまだネットワークを使用していますが、これらはすべてあなたのために処理されるので、テストがすべてメモリ内にあるかのように動作します。 SuperTestは広く使われているようであり、あなたのルートをテストするための許容可能な方法です。
あなたはあなたがテストしようとしていることを言っていませんでしたが、目的がいくつかのルートをテストすることであれば、SuperTestの代わりに、ルート内のロジックをテスト可能な別のモジュールExpressから独立しています。
変化:
routes
|
-- index.js
に:
routes
|
-- index.js
|
controllers
|
-- myCustomController.js
テストは、単にmyCustomController.js
を標的とし、任意の必要な依存関係を注入することができました。
Expressのソースに行くと、私が望むほど簡単なAPIがあることがわかりました。それはthe tests for express.Routerに記載されています。
/**
* @param {express.Router} router
*/
function dispatchToRouter(router, url, callback) {
var request = {
url : url,
method : 'GET'
};
// stub a Response object with a (relevant) subset of the needed
// methods, such as .json(), .status(), .send(), .end(), ...
var response = {
json : function(results) {
callback(results);
}
};
router.handle(request, response, function(err) {
console.log('These errors happened during processing: ', err);
});
}
しかし、欠点は、まさにそれが最初の場所で文書化されていません理由は、ある...:
/**
* Dispatch a req, res into the router.
* @private
*/
proto.handle = function handle(req, res, out) {
var self = this;
...
}
だから、このコードに依存することである:それはRouter.prototypeのプライベート関数であります世界で最も安全なものではありません。
run-middleware
モジュールを正確に使用できます。あなたは急行アプリにusuaulを作成し、次にあなたは
it('should support .use of other routers', function(done){
var app=require('express')()
app.get('/bar', function(req, res){
res.status(200).end();
});
app.runMiddleware('/bar',{options},function(responseCode,body,headers){
console.log(responseCode) // Should return 200
done()
})
});
詳細情報あなたのパラメータを使用してアプリケーションを呼び出すことができます。
- ModuleページGithub & NPMに。
- Examples of use run-middleware module
開示:私は、このモジュールのメンテナ&最初の開発者です。
- 1. C#のオブジェクトリテラルでメソッドを直接呼び出すことはできますか?
- 2. SAMLでIDPを直接呼び出すことはできますか?
- 3. ファイルをコマンドラインから呼び出すことを要求する
- 4. AWSラムダからドッカーを直接呼び出すことは可能ですか
- 5. DUnit GUITestrunnerのコードからToolsAPIを呼び出すことはできますか?
- 6. C#からC++コードを呼び出すことはできますか?
- 7. C++からclojureコードを呼び出すことはできますか?
- 8. コードからASP.NET RegSQLを呼び出すことはできますか?
- 9. デプロイ直後にセッションBeanのメソッドを直接呼び出すことはできますか?
- 10. Expressが投稿要求の中でAPIを呼び出す
- 11. Chromeはどのように関数呼び出しスタックを検出しますか?私はpuppeteerで直接呼び出すことはできますか?
- 12. デリゲートのメソッドをボタンから直接呼び出すことは良いことですか?
- 13. 提出側のクライアントは、オーダーに「ブロードキャスト」を直接呼び出すことはできますか?
- 14. watchkit拡張機能からREST APIを直接呼び出すことができますか?
- 15. angular2テスト:コンポーネントオブジェクト自体を直接呼び出すことはできません
- 16. リアクションファンクションスタイルコンポーネント直接呼び出しvs jsx - 子はどこですか?
- 17. カーネルから呼び出すことができるデバイス上の機能を持つことができます
- 18. ftlテンプレートからFreeMarkerディレクティブを直接呼び出す方法は?
- 19. Clojureではマップを持つキーが必要な関数を呼び出すことはできますか?
- 20. Javaの子クラスで直接親クラスのインスタンスメソッドを呼び出すことはできますか?
- 21. 端末からAPIゲートウェイエンドポイントを呼び出すことはできますが、BraintreeのコンソールからAPIゲートウェイエンドポイントを呼び出すことはできますか?
- 22. C++コンストラクタを直接呼び出すことができません。
- 23. WCFサービスを直接呼び出すことができません(.NET 3.0)
- 24. コントローラの機能をビューボタンから直接呼び出す
- 25. WebViewから直接Kindle Fireのビデオプレーヤーアプリケーションを呼び出す
- 26. mapStateToPropsではなく、アクション作成者を直接呼び出すことはできますか?
- 27. 流星殻で直接サーバー側のメソッドを呼び出すことはできますか?
- 28. Androidプロジェクトではどのようにしてuiautomator apiを直接呼び出すことができますか?
- 29. 呼び出す直接
- 30. PropertyUtils.copyPropertiesはいつ呼び出すことができますか?
@oligofren:ルータに偽のリクエストを送信する方法を示すための回答を更新しました。 – carpenter
母、私と同じ線にリンクを追加しました。 – oligofren