問題タブ [proxyquire]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
node.js - proxyquire を使用して、サードパーティ モジュールの依存関係で require をスタブ化する
proxyquire を使用して、サードパーティのモジュールが必要とするモジュールの require をスタブしようとしています。
例:
私のモジュールには「foo」と呼ばれる 3 番目の mod が必要です。
そのモジュールは「bar」と呼ばれる別のライブラリに依存しており、bar にはモックしたい require があります。これは可能ですか?
「three」と呼ばれるサードパーティのライブラリでは:
バーライブラリで:
次に、私のテストで次のようなもの:
編集:
私が欲しいのは次のようなものだと思います:
ただし、バー ライブラリにコンソール ログを配置し、require の後に thingiwanttomock 変数が何であるかを出力すると、それは私のモック オブジェクトではありません。
バーライブラリで:
proxyquire は依存ライブラリの require ステートメントから取り込まれるものを実際に変更しますか? 多分それは私の混乱があるところです。
javascript - proxyquire を使用した MongoDB のモック
テストでこれを行うことにより、 proxyquireを使用してMongoDB の依存関係をモックしたいと思います。
各ステートメントの前に:
そして、コントローラーに移動して console.log(mongoose.isMocked) を実行すると、未定義になり、mongoose.model.toString() を出力すると、mongoose メソッドがオーバーライドされていないように見えます。
この記事をフォローアップして、同じロジックを実装しようとしましたが、同じ結果が得られません。
どんな助けでも大歓迎です、ありがとう!
javascript - Node.jsでproxyquireを使用して匿名関数をモックしますか?
Node.jsでproxyquireを使用して匿名関数をモックすることは可能ですか? コンストラクターが匿名クラスであるモジュールをモックする必要があります。これをモックするためにproxyquireを使用することは可能ですか、またはこれを行う別の方法はありますか?
私がproxyquireを使用している理由は、ユニットテストを書いているファイルに「必要」なモジュールだからです。
返されるコードと関数の例は次のとおりです。
これは、config をパラメーターとして受け取る無名関数を返します。
javascript - Node.js でネストされたモジュールをモックしますか?
私はこれらのファイルを持っています:
File1.js
File2.js
File2 の単体テストを作成しているmod1
ときに、呼び出しを行わないようにモックすることはできますmod1.someFunction()
か?
javascript - 単体テスト用の Node モジュールのマップ パス
クライアント側では、次のように、SystemJS を使用してモジュールへのパスをスタブ化します。
にrequire('root-components/foo');
マップされapplicationRoot/rootComponents/foo
ます。
require('root-components/foo');
問題は、 Mocha でモジュールを実行すると、ノードがそのパスの意味がわからないことです。ノードでこのパス マッピングを実現する適切な方法はありますか?
Proxyquire はこれに対応していますか? 私は彼らのドキュメントを読みましたが、それを示すものは何も見つかりませんでした.
これは単体テストのためだけなので、あらゆる種類のパーティー ユーティリティを使用したソリューションに満足しています。
node.js - Node.js スタブ request.get() でコールバックをすぐに呼び出す
request.get()
内部で関数を呼び出す関数をテストしようとしています。
私がしようとしているのは、コールバック関数のすべてのブランチをカバーすることです。上部クロージャの変数を使用しているため、コールバック関数を別の関数に分離せずにそれを達成しようとしています。
説明する例を次に示します.. foo.js:
私はそれをsinonとproxyquireでスタブしようとしました。
foo.spec.js (sinon でスタブ化):
foo.spec.js (proxyquire でスタブ化):
どちらもうまくいきませんでした。デバッグしようとしたとき、コールバック関数にヒットしたことはありません。これは、メソッドを正しくスタブしなかったことを示唆してrequest.get()
おり、まだ非同期操作になっています。両方のシナリオ(シノンとプロキシクワイア)で何が間違っていたのか、それを修正する方法の例を教えていただければ幸いです。
node.js - proxyquire が元のコードを呼び出せないようにしますか?
私はマングースモデルをテストしようとしています。
私はproxyquireを使って統合的にモックしていますが、元のファイルがモデルを登録しているので、
必要なものはすべてproxyquireによってすでに注入されているため、モデルをロードしないようにするにはどうすればよいですか?
テストするコード:
モデル/Test.js:
テスト/test.js:
私が見つけた別の方法は、テストでマングースをproxyquireし、それをモックして登録を防ぐことですが、それは多くのコードになり、このモデルが4層または5層の深さで呼び出される他のテストがあるため、すべてのレベルでproxyquiring高等関数をモックすることはできますが、本当に面倒です。
javascript - ノード エクスプレス エンドポイントとスタブ サードパーティ API 呼び出しのテスト
次のような高速アプリがあります。
サーバー.js
posts_controller.js
post.js
spec/posts_controller_spec.js
ここでの私の目標は、thirdPartyApi.get()
. proxyquire
この行を posts_controller_spec に追加してみました:
server.js ファイルは third_party_api を再度必要とするファイルであるため、これは機能しません。
コントローラーをテストするには、次のようなことができます。
この 2 番目の戦略は適切ではありません。スタブを作成する必要がreq
あり、実際のインスタンスres
をバイパスしているためです。app
proxyquire などを使用してこれを行う簡単な方法はありますか?