問題タブ [sinon]

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.

0 投票する
2 に答える
10124 参照

coffeescript - window.location.searchのSinon.JSスタブ

window.location.searchを呼び出す単純な関数をテストしようとしています。選択したURLを返すことができるように、この呼び出しをスタブする方法を理解しようとしています。

働き:

テストケース:

私の最初の試みは、次のように直接値を返すことでした。

もちろん、これは機能しません。スタブを正しく指定しているとは思いませんが、それは私の意図を示しています。

これを解決する方法についてのアイデアは大歓迎です。

0 投票する
2 に答える
13386 参照

javascript - sinon.js を使用して、実際のコンストラクター/プロトタイプに基づくスパイ メソッドで「スパイ オブジェクト」を作成します。

Mocha テストで依存関係をスタブ化する方法として、sinon.js を使用しています。私は古典的なモック アプローチよりも「スパイ」アプローチを好みます。なぜなら、スパイの内省はより明確に見え、古典的なモック オブジェクトを使用したやや後ろ向きな考え方よりも柔軟性が高いからです。

とはいえ、オブジェクト全体のテスト スパイを作成する場合、間違った使い方をしているのではないでしょうか。4 つのメソッドを持つテスト依存関係があり、それらの各メソッドをスタブ化し、そのうちの 1 つまたは 2 つに対してアサーションを作成したいとします。現在、私はこれをやっています:

それから私はただのようなことを尋ねますspyObj.aMethod.calledWith(a, b, c)

テストスイート自体でメソッドの名前を繰り返すよりも、クラス全体をモックアウトするより良い方法はありますか? sinon.stub() が特定のオブジェクトのすべてのメンバーを反復しようとしているように見えますが、V8 などの最新の JS ランタイムでは、オブジェクトが実際には列挙可能なものです。また、同等のオブジェクトを返すのではなく、実際のオブジェクトにモンキー パッチを適用しようとしますが、これはやや望ましくありません。インターフェイスに準拠しているが、特に指定しない限り、null オブジェクトのように動作するオブジェクトが必要なだけです。

次のようなことができるとよいでしょう:

上記のようなラッパーを作成するために、Node.js でコンストラクター/プロトタイプのすべてのメソッドを見つけるにはどうすればよいですか?

これは、多くのメソッドで呼び出しをテストすることよりも、ロジックをスタブ化することに関するものです (1 つに制限するか、プッシュで 2 つに制限しようとしています)。たとえば、不要な I/O を実行したり、実行した場合に追加の複雑なフィクスチャが必要になったりする可能性があります。

0 投票する
1 に答える
1097 参照

backbone.js - Qunit + Sinonは、Backboneのモデルイベントをテストします

最近、私は最初の本格的なBackboneアプリのテストをいくつか実行しようとしています。これまでのところ通常のテストでは問題はありませんでしたが、非同期テストを設定しようとして立ち往生しています。

基本的に、無効な属性を持つモデルを保存しようとすると、サーバーAPIは500 HTTPコードエラーのページを返します。これにより、バックボーンで正しい「エラー」状態がトリガーされるかどうかを確認したいと思います。

私はこのようにテストを設定しようとしました:

問題は、save関数のエラーコールバックがモデル内のエラーコールバックをオーバーライドすることです。したがって、それをトリガーする唯一の方法は、手動で行うことです。

私の本番環境ではモデルの保存関数のエラーコールバックがないため、テストするのは正しい方法ではないと思いますが、一方で、テストを評価するためにajax応答を待つようにQunitに指示する方法がわかりませんアサーション。

誰かが私にそれを機能させる方法を提案できますか?ありがとうございました!

0 投票する
3 に答える
3185 参照

testing - JasmineとSinonを使用したBackboneモデルのテスト-オブジェクト# has no method 'spy'

I am trying to learn how to use Jasmine and Sinon for testing a Backbone application, and I was following

I am trying to learn how to use Jasmine and Sinon for testing a Backbone application, and I was following this tutorial. Nevertheless, I ran into a problem that I don't know how to solve.

Most likely the solution is simple, but I need some guidance ...

In my project.spec.js file this is the code that is giving the problem:

And this is the specific error that can be seen in the browser:

In addition to the sinon.js library, I have installed the jasmine-sinon.js library (both are in the vendor/assets/javascripts folder and are included in the application.js file).

Thank you, Alexandra


I'm going to post this as an answer, based on the comment thread above. We've narrowed down the problem to the line where sinon.spy() is called, so it's not specific to this test but to how sinon is being loaded.

I suspect the problem is that you're including sinon and jasmine-sinon in application.js, when they should really go in spec/javascripts/spec.js (in the same format). Try changing that and see if anything changes.

UPDATE:

Based on the comment thread below, it seems the code is getting to the this.project.save(...) line but the validations aren't working: I know this because if you're getting a POST error in the console, it means that backbone actually made the request (which it should not have because the name is empty). So you should go back and check the code you are actually testing.

0 投票する
1 に答える
765 参照

ember.js - Ember データの遅延読み込み

私は、ember コントローラーの qunit テストを書いています。私の実際のアプリケーションでは、別のページからルーティングされてデータを取得します。しかし、テストを書いている間、非同期呼び出しを送信し、データを取得するまでテストが実行されて失敗するため、Ember データストアからデータを取得するのに問題があります。同じ実行ループで ember store にデータを返すように強制する方法はありますか? または、それを行う他の方法はありますか?

0 投票する
1 に答える
3452 参照

javascript - Jasmine のビルトイン Spys よりも Sinon.js を使用する利点は何ですか?

フロント エンド コードをテストするための jsTestDriver/Jasmine 環境をつなぎ合わせており、スタンドアロン (またはドロップイン) スパイ用の Sinon.js への参照が多数見られます。Jasmine が UI のテストに使用しない、Sinon.js がテーブルにもたらすものを誰か説明できますか?

0 投票する
1 に答える
708 参照

javascript - CSS transitionEnd イベントの後に実行される JavaScript を単体テストするにはどうすればよいですか

ブートストラップモーダルウィンドウがあります。qunit+sinonjs (偽のタイマー) を使用すると、1 つの要素がページに残ります ( div class='modal-backdor'):

twitter-bootstrap (95 行目)を見ると、transitionEnd イベントが発生しています。イベントが発生した後に実行されるコードをテストするにはどうすればよいですか?

0 投票する
1 に答える
9931 参照

javascript - dojoのモジュールではないJSファイルをロードする方法は?

私はjavascriptとdojonoobであると言うことから始めます。ただし、DOHフレームワークを使用して、jsコードの単体テストの作成に取り組んでいます。私が気づいたことの1つは、フレームワークにはXHRリクエストをモックする方法がないようだということです。そこで、モックにシノンを使うことにしました。

ここに私の質問があります、私は私のdojoモジュールにsinonコードをうまくロードすることができません。これが私が試したことです:

テストパッケージを正しいディレクトリにマップし、そこから他のファイルをロードできます。では、どうすればシノンをロードできますか?

0 投票する
1 に答える
1938 参照

javascript - SinonFakeサーバーが自動応答しない

こんにちは私はフェッチを使用してコレクションをテストしています。それを呼び出すと、server.responseを呼び出した後でのみ、偽のサーバーからの応答がありません。目的の結果が得られます。

何故ですか ?

私のコード

0 投票する
2 に答える
30606 参照

javascript - Stubbing and/or mocking a class in sinon.js?

I've created a database wrapper for my application, shown below. To test it, I obviously would like to replace the actual database library. I could create a new class that mocks the query method and catch all input there, but using sinon.js seems more appropriate, but how would I use it?
Is the mock or stub features of sinon.js what I should be using?