問題タブ [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.
javascript - Sinon.js のスタブと、オブジェクトをパラメーターとして使用した外部関数呼び出しのテストは、後で ref によって変更されます
私の関数が別の関数、特にオブジェクトである引数に対して行う呼び出しをテストしようとしています。
問題は、sinon.js がその引数配列で指定されたオブジェクト パラメーターへの参照を格納しているように見えることです。これは当然のことです。ただし、これにより、後でパラメーターが ref によって変更されたときに問題が発生し、関数が呼び出された時点でこれらのパラメーターの見かけの値が変更されます。
このような状況を単体テストする最良の方法は何ですか?
これは不自然な例です:
http://jsfiddle.net/xtfQu/
この「問題」に関するさまざまなハックを考えることができます。sinon を機能させるためだけに、オブジェクトのクローンを作成したり、製品コードを変更したりする必要のない、よりクリーンなアプローチはありますか?
javascript - 単体テストの方法 (QUnit と Sinon を使用) コンパイル済みコード (Closure Compiler Advanced Compilation)
QUnit を使用してコンパイルされていないコードの単体テストをいくつか作成し、必要に応じて sinon を使用して関数をモックしました。しかし問題は、Closure Compiler による高度なコンパイルの後、関数名が変更されるため、単体テスト ケースがコンパイル済みコードに適用されないことです。
ここで読んだhttps://groups.google.com/forum/#!topic/closure-library-discuss/uU2t2xbVtlcコンパイルされたコードをテストする必要はありません。でも、それでもやりたい。
したがって、私の質問は、これらのテスト ケースをコンパイル済みコードに移植できるかどうかです。はいの場合、どうすればそれを行うことができますか?
javascript - Node.jsのSinon.jsを使用した単体テスト用のPostgresのモック
テストしているモジュールで必要なpostgresへの呼び出しをモックするためにsinonを使用する方法、またはそれが可能であるかどうかについて頭を悩ませています。
私はpostgresモジュール自体をテストしようとはしていません。それが期待どおりに機能していること、そしてこのインスタンスで呼び出すべきものを呼び出していることを確認するためのオブジェクトだけです。
問題はノードのセットアップが必要なことだと思います。私のモジュールではpostgresモジュールがデータベースにアクセスする必要がありますが、ここでは統合テストを実行したくありません。コードが分離して機能していることを確認したいだけです。データベースが何をしているのかは気にしないので、統合テストに任せます。
モック/スタブ/フェイクを関数に送信し、その存在をテストし、存在する場合は必要なモジュールで使用するためのオプションのパラメーターを持つように関数を設定する人を見たことがありますが、それは私には匂いのようです(私はノードで新しいので、多分これはそうではありません)。
可能であれば、requireをハイジャックするのではなく、これをモックアウトしたいと思います。
いくつかのコード(私はTDDで実行していて、関数は実際には何もしないので、これは実際のコードではないことに注意してください。関数名は実際のものです)
テスト設定
サンプル機能
このようにpostgresモジュールをラップするのは少しおかしいかもしれませんが、このアプリには複数の「プロバイダー」があり、それらすべてに同じAPIを公開して、それらを交換して使用できるようにするため、いくつかの設計があります。
アップデート
私は、接続呼び出しが行われたかどうかを確認し、データを返すので、テストが複雑すぎると判断しました。そのため、データを取り除いて2つのテストに入れました。
模擬試験
これは(私が思うに)postgresコネクタコードがないと失敗し、合格すると(ブーム:))機能します
問題は2番目の方法です。これは、失敗するはずのときに100%通過するスタブ(おそらくスパイ)を使用するので、午前中にそれを取得します。
アップデート2
私はテストに100%満足していません。これは主に、データベースにアクセスするclient.queryメソッドを乗っ取っているのではなく、executeメソッドをハイジャックしてパスに強制しているためですが、結果を確認できます。動作をテストするためにそれに対して主張しますが、提案された改善を受け入れるでしょう。
私はスパイを使用してメソッドをキャッチし、nullを返し、メソッドがパスバックするように、行を含む偽のオブジェクトを使用しています。このテストは、クエリ動作を追加すると変更されますが、ハードルを乗り越えます。
javascript - XDomainRequestを使用したJavaScriptのテスト
クロスドメインサーバーにデータをプッシュするjavascriptモジュールで作業しています。私はqunitにテストスイートを持っており、XmlHttpRequestからのリクエストをインターセプトし、応答を偽造するためにsinonを使用して動作を検証しています。これは、XDomainRequestを使用してCORS呼び出しを許可するIE8 / 9を除いて、うまく機能します(機能が多少制限されています)。
私の問題は、sinonがXmlHttpRequestの使用のモックを許可しているが、XDomainRequestは許可していないことです。グーグルした後、XDomainRequestをモックしている人を見つけることができませんでした。XDomainRequestに関するテストの実際的な経験はありますか?また、何ができるでしょうか?
unit-testing - Jasmine や Sinon を使用して jQuery の .ajax() の約束を適切に単体テストする方法は?
jQuery .ajax() の約束を返すかなり単純な関数があります。
ほとんどの場合、この新しい promise インターフェースは夢のように機能し、jQuery の .ajax() を使用するときにコールバック ピラミッドを排除することは素晴らしいことです。ただし、Jasmine および/または Sinon を使用してこれらの約束を適切にテストする方法を理解することはできません。
Sinon のドキュメントはすべて、昔ながらのコールバックを使用していることを前提としています。promises/deferreds でそれを使用する方法の単一の例が表示されません
Jasmine または Sinon スパイを使用して $.ajax をスパイしようとすると、スパイは事実上 promise を上書きするため、その
done
,fail
およびalways
節が ajax 関数に存在しなくなり、promise が解決されず、代わりにエラーが発生します。
前述のテスト ライブラリを使用してこれらの新しい jQuery .ajax() の約束をテストする方法の 1 つまたは 2 つの例が本当に好きです。私はかなり熱心にネットを調べましたが、実際には何もかき集めていません。Jasmine.ajax を使用して言及されている 1 つのリソースを見つけましたが、Sinon がすぐに使用できるほとんどの同じ機能を提供することを考えると、可能であればそれを避けたいと思います。
jquery - IE8では、JQuery.isFunctionはdocument.writeを関数として報告しません
IE8でjQuery.isFunction(document.write)を試しましたが、 falseが返されました。
これらは私が気づいたいくつかのことです。1.document.write.constructorは未定義 です2.typeofdocument.writeはオブジェクトです
Sinonを使用してdocument.writeにスタブを作成するときにこの問題を知りました。これは、オブジェクトプロパティの書き込みを関数としてラップしようとしたという例外をスローしました。
特にdocument.writeのチェックをバイパスすることで、この問題を回避できますが、JQueryのバグなのか、意図的なものなのかを知りたかっただけです(そうではないようですが)。
また、JQueryコードとその簡単なチェック$ .call(a)=== "[object Function]"をチェックしましたが、IE8(おそらく他のバージョン)の場合は失敗します。
もう1つ、document.writeの呼び出し関数が定義されてネイティブであるかどうかを確認できないのはなぜですか?これで十分かどうか?
jquery - スタブ jQuery.fn メソッドは Chrome と Firefox では正常に動作し、IE8 では失敗します
QUnit で sinon スタブを使用して一連のテストを作成しています。テストされたメソッドには、Foo と呼ばれるカスタム プラグインの依存関係があります。
手動でスタブを作成する場合に比べて、sinon スタブの使用は非常に簡単で直感的です。問題は、これが Chrome と Firefox では正常に機能するが、IE8 では機能しないことです。
テスト結果のIE8の場合、次のようになります。
テストしたコードにデバッグ用のブレッドクラムを配置すると、$().Foo と $.fn.Foo の両方がメソッドとして認識されるように見えますが、テストは $("#some-selector").Foo() が呼び出された後に実行を停止します。 、IE8で実行した場合。
javascript - この Javascript プロパティにアクセスするにはどうすればよいですか?
UserMock
以下に示すクラス内の特定のメソッドが呼び出されたことを確認する必要があります。テスト中のデフォルトの動作を防ぐために、別のモジュールに挿入するためにこのモック バージョンを作成しました。
を既に使用していsinon.js
ますが、 などのメソッドにアクセスisValid()
してスパイ/スタブに置き換えるにはどうすればよいですか? クラスをインスタンス化せずにこれを行うことは可能ですか?
ありがとうございました
javascript - sinonのコーヒースクリプトコンストラクターをスパイ
コーヒー スクリプト コンストラクターが例外をスローすることを確認しようとしています (sinon と sinon-chai を使用)。
犬のインスタンス化が例外をスローすることを確認するスパイを正しく作成するにはどうすればよいですか?