問題タブ [nodeunit]
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 - require() は、単体テスト中に常にモジュールの同じインスタンスを返します
テスト フレームワーク (nodeunit、mocha、should) に各テストの「必要な」モジュールをリロードするように指示する方法はありますか?
私のモジュールには複数のテストがあり、Node のモジュール システムは最初のrequire()
.スイートです。)
何が起こっているのかというと、TDD が次のようなモジュールを作成するように私を駆り立てたということです。
私の最初のテストでは、dep1 のモックを挿入します。次のテストでは、dep2 のモックを挿入します。しかし、require()
常にモジュールの同じインスタンスを返すため、2 番目のテストのモックが適切に挿入されることはありません。テストはすべて同じテスト対象オブジェクトで実行されますが、これは悪いことです。
1 つの解決策は、「new」をサポートするようにモジュールを再設計し、毎回新しいインスタンスを返すことです。そのルートをたどる前に、テスト環境でモジュールを強制的にリロードする方法はありますか?
javascript - NodeUnit - 非同期関数のテスト
を使用して非同期関数によって返された結果をテストしたいと考えていますnodeunit
。私は次のテストを持っています:
しかし、実行すると次のエラーが発生します。
assert.done();
呼び出しをコールバック関数の外に移動すると、AJAX 呼び出しが行われる前にテストが終了します。
assert.expect(3);
また、コールバック関数が呼び出されるまで「待機」するようにテストの最初に追加しようとしましたassert.done();
が、上記と同じエラーが発生します。
いずれの場合も、期待される#####
ものは明らかにコンソールに出力されません。私は何を間違っていますか??
node.js - Windows でのノードユニットのデバッグ
nodeunit の実行時にテストをデバッグしようとしていますが、この SO の質問で説明されていることを試していましたが、試してみると Windows では機能しません。
Windowsでこれを試していますが、node_pathはシステム変数にあります。
javascript - nodejs モジュールの関数をモック関数に置き換える
APIのラッパーであるnodejsで小さなプロジェクトを作成しています。nodeunitを使用していくつかの単体テストを作成しており、さまざまなモック関数をモジュールに挿入する必要があります (たとえば、サーバーへの HTTP 要求の作成をシミュレートし、さまざまな応答を出力してコードをテストする関数)。
私が持っている質問は、これらの関数をモジュールにどのように挿入するのですか?
理論的には次のように機能するはずの 2 つの方法を特定しました。
方法 1
置き換えたいモジュールのフォルダーの名前を変更し、挿入したいコードを含む新しいフォルダーを追加します。
テストを実行した後、私は反対のことをします:
これはかなりハックに思え、理論的には機能するはずですが、私が試みたいものではありません。
方法 2
これは、モジュールの初期化を利用する私の推奨方法です。私のモジュールは、次のようにさまざまなオプションを含めることができる JSON オブジェクトを受け取ります。
たとえば、さまざまな関数を含む JSON オブジェクトの値を使用して、「_testing」と呼ばれるこの JSON オブジェクトにキーを追加することを計画しています。
私のモジュールでは、次のことができます。
- this._testing が存在し、JSON オブジェクトである場合
- this._testing をループします
- this._testing の各キーについて
- キーと同じ名前の関数をその値に置き換えます。
テスト目的でモジュールに関数を挿入/置換するより良い方法はありますか?
javascript - テストが失敗しても TravisCI がビルドに失敗しない
JavaScript で記述されたテストがあり、テストにはTravisCIを使用しています。
設定
私package.json
は次のようなものです:
そして私.travis.yml
は:
「testsRunner.js」は次のとおりです。
そしてsuite1/test.js
最後に:
トラビスからのログ
Travis からのビルド ログとテスト実行は次のとおりです。
問題
問題は、test1
成功test2
して合格しないことです。前にtest2
例外をスローしたため、Travis は私のビルドを失敗として報告しました。
ただし、テストを修正したため、test2
例外はスローされませんが、アサートは失敗します。ただし、Travis はそのビルドを成功として報告していますが、失敗したビルドとして報告する必要があります。
これをどのように処理しますか?
編集
ランナーを次のように変更しました。
さて、ログでは、Done!
すべての前に表示されていることがわかります。その後、各テスト ログとスタック トレースを確認できます。これらのテストが非同期で実行され、メイン プロセスが0
ステータスで終了する可能性はありますか?
修理済み
Chris Beck の提案に従って、ランナーを次のように変更しました。
javascript - 複数の GET リクエストがすべて完了した後で、それらのレスポンスを比較する方法
特定の get リクエストを行うたびに、 というボディ内の特定の配列に対して同じ結果が得られるようにしたいと考えていspells
ます。(補足: 体の別の部分active_spell
がランダム/異なることを少なくとも時々確認するために、別のテストも作成します)。次のコードを書きましたが、'data' または 'end' イベントに入らないようです。
では、なぜ「データ」イベントと「終了」イベントに入らないのでしょうか?
そして本当に重要な質問は、私の主な目的を達成するためのより適切または効率的な方法はありますか?
注:これを支援するためにライブラリを見てもかまいませんが、追加する必要なくこれを行う方法を探しています。
node.js - Sinon を使用する場合、スタブ インスタンスでスタブ関数を置き換える方法は?
でインスタンスを作成した場合 var a = sinon.createStubInstance(MyContructor)
。
のようなスタブ化された関数の 1 つを置き換えるにはどうすればよいですかvar stub = sinon.stub(object, "method", func);
。
私がこれを行っている主な理由は、これが述べたように複数のコールバックの回避策を達成したいからです