ホームページ > ウェブフロントエンド > jsチュートリアル > Sinonチュートリアル:模擬、スパイ、スタブを使用したJavaScriptテスト

Sinonチュートリアル:模擬、スパイ、スタブを使用したJavaScriptテスト

Joseph Gordon-Levitt
リリース: 2025-02-18 10:13:13
オリジナル
710 人が閲覧しました

Sinon Tutorial: JavaScript Testing with Mocks, Spies & Stubs

この記事は、マーク・ブラウンとマーク・トウラーによってレビューされました。 SitePointコンテンツを最高の状態にしてくれたすべてのSitePointピアレビューアに感謝します!

ユニットテストを書く際の最大の障害の1つは、自明でないコードを処理する方法です。

実際のプロジェクトでは、コードは多くの場合、テストを困難にするさまざまな操作を実行します。 ajaxリクエスト、タイマー、日付、他のブラウザ機能へのアクセス…またはデータベースは、node.jsを使用している場合は常に楽しいです。ネットワークまたはファイルアクセスもそうです。

コードでそれらを制御できないため、これらすべてをテストするのは困難です。 AJAXを使用している場合、テストが合格できるようにリクエストに応答するサーバーが必要です。 Settimeoutを使用する場合、テストは待つ必要があります。データベースまたはネットワークにも同じことが言えます。正しいデータを備えたデータベースまたはネットワークサーバーが必要です。

実生活は、多くのテストチュートリアルが見えるほど簡単ではありません。しかし、あなたは解決策があることを知っていますか?

Sinonを使用することで、些細なコードを簡単にテストすることができます!

それがどのように機能するか見てみましょう。

キーポイント

  • Sinon Simplified Testing:Sinon.jsは、Ajaxコール、タイマー、データベースの相互作用などの複雑な操作を含むJavaScriptコードのテストを簡素化するために重要です。これにより、これらの部品をモック、スパイ、スタブに置き換えることができます。
  • 3種類のテストスタンド:Sinonは、スパイを分類します(関数呼び出しに関する情報を収集する)。オブジェクト全体)。
  • 実際のケース:Sinonは、外部API呼び出しや時間ベースの機能など、外部依存関係が複雑または速度を落とすことができる単体テストシナリオに特に役立ちます。
  • 統合とセットアップ:Sinonは、node.jsおよびブラウザーベースのテスト環境に簡単に統合でき、さまざまなJavaScriptアプリケーションでの汎用性と使いやすさを向上させることができます。
  • 強化されたアサーション:Sinonは、より明確なエラーメッセージを生成する拡張されたアサーションメソッドを提供し、テスト障害中のデバッグプロセスを改善します。
  • ベストプラクティス:パッケージテストケースを使用すると、テストの代役が適切にクリーニングされ、他のテストの副作用が防止され、テストスイートの潜在的なエラーが減少します。 sinon.test()
シノンがとても重要で便利な理由は何ですか?

要するに、シノンを使用すると、テストの難しい部分を簡単にするものに置き換えることができます。

コードをテストする場合、テスト以外の要因の影響を受けたくありません。いくつかの外部要因がテストに影響する場合、テストはより複雑になり、ランダムに失敗する可能性があります。

ajax呼び出しを行うコードをテストしたい場合、どのように行いますか?サーバーを実行し、テストに必要な正確な応答を提供する必要があります。セットアップは複雑で、執筆と実行のユニットテストを困難にします。

コードが時間に依存している場合はどうなりますか?アクションを実行する前に1秒間待っているとします。今何をすべきか?テストでSettimeoutを使用して1秒間待つことができますが、これによりテストが遅くなります。たとえば、5分間の間隔が長い場合を想像してください。おそらく、テストを実行するたびに5分待たたくないと思います。

Sinonを使用することで、これらの問題(および他の多くの問題)の両方を解決し、複雑さを排除できます。

シノンはどのように働いていますか?

sinonは、いわゆるテストを簡単に作成できるようにすることで、テストの複雑さを削除するのに役立ちます

名前が示すように、テストの代役は、テストで使用されているコードスニペットの代替品です。 Ajaxの例を振り返ってみると、サーバーをセットアップするのではなく、代わりにAjaxコールをTest Stand-Inに置き換えます。時間の例では、テストの代役を使用して、「前方に移動する」ことができます。

これは少し奇妙に聞こえるかもしれませんが、基本的な概念は簡単です。 JavaScriptは非常に動的であるため、あらゆる機能を採用して他のものに置き換えることができます。代役をテストすることは、このアイデアをさらに一歩進めていることです。 Sinonを使用すると、JavaScript関数をテストの代役に置き換えることができます。その後、さまざまな操作を実行するように設定して、複雑なものを簡単にすることができます。

Sinonは、テストのスタンドインを3つのタイプに分割します:

    スパイ、機能に影響を与えることなく関数呼び出しに関する情報を提供
  • スパイのような
  • スタブですが、関数を完全に置き換えます。これにより、スタブ関数に好きなことをさせることができます - 例外をスローする、特定の値を返すなど
  • シミュレーションでは、スパイとスタブを組み合わせることで、オブジェクト全体を簡単に交換できます
  • さらに、Sinonは他のヘルププログラムを提供していますが、これらのヘルププログラムはこの記事の範囲外です。

偽のタイマーは、setimeoutのトリガーなど、時間を前進させるために使用できます

    偽のxmlhttprequestとサーバー。これは、ajaxのリクエストと応答を偽造するために使用できます
  • これらの機能により、Sinonは、テストの外部依存関係によって引き起こされるすべての困難を解決できます。 Sinonを効果的に使用するためのヒントを学習した場合、他のツールは必要ありません。
インストールsinon

最初に、Sinonをインストールする必要があります。

Node.jsテストの場合:

NPMを使用して、Sinonをインストールして、NPM

を介してSinonをインストールします

var sinon = require( 'sinon')を使用したテストでsinon
    を紹介します。
  1. ブラウザベースのテストの場合:
    1. NPMを使用してSinonをインストールしてNPM経由でSinonをインストールしたり、CDNを使用したり、SinonのWebサイトからダウンロードしたりできます。
    2. テストランナーページにsinon.jsを含めます。
    初心者

    sinonには多くの機能がありますが、それらの多くはそれ自体に構築されています。あなたはそれの一部を知っています、そしてあなたはすでに次の部分を知っています。基本を理解し、それぞれの異なる部分が何をするかを理解したら、これによりSinonは使いやすくなります。

    コードがトラブルを引き起こす関数を呼び出すときに、通常、シノンが必要です。

    ajaxの場合、$ .getまたはxmlhttprequestです。しばらくの間、関数はsetimeoutである可能性があります。データベースの場合、mongodb.findoneかもしれません。

    この関数を簡単に議論することを簡単にするために、私はそれを

    依存関係

    と呼びます。テストしている関数は、別の関数の結果に依存します。 Sinonの基本的な使用パターンは、問題のある依存関係をテストのスタンドインに置き換えることです。

    ajaxをテストするとき、xmlhttprequestをajax要求をシミュレートするテストの代役に置き換えます

    時間をテストするとき、SettimeOutを偽のタイマーに置き換えます
  • データベースアクセスをテストするとき、mongodb.findoneをすぐにいくつかの偽データを返すテストの適切なものに置き換えることができます
  • それが実際にどのように機能するか見てみましょう。
  • spy

スパイはシノンの最も簡単な部分であり、他の機能が構築されています。

スパイの主な目的は、関数呼び出しに関する情報を収集することです。それらを使用して、関数が呼び出されたかどうかなど、特定のことを確認することもできます。

function sinon.spyは、関数のように呼ばれることができるスパイオブジェクトを返しますが、それに作られた呼び出しに関する属性も含まれています。上記の例では、FirstCallプロパティには、渡されたパラメーターリストであるFirstCall.Argsなど、最初の呼び出しに関する情報が含まれています。

パラメーターなしでsinon.spyを呼び出すことで匿名のスパイを作成できますが、より一般的なパターンは、別の関数をスパイに置き換えることです。
var spy = sinon.spy();

//我们可以像函数一样调用间谍
spy('Hello', 'World');

//现在我们可以获取有关调用的信息
console.log(spy.firstCall.args); //输出:['Hello', 'World']
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

別の関数をスパイに置き換えて、前の例と同様に動作しますが、1つの重要な違いがあります。スパイの使用が終了したら、上記の例の最後の行に示すように、元の関数を復元することを忘れないでください。これがなければ、テストは異常に動作する場合があります。

Spyには、使用方法に関するさまざまな情報を提供するさまざまなプロパティがあります。 SinonのSPYドキュメントには、利用可能なすべてのオプションの完全なリストが含まれています。
var user = {
  ...
  setName: function(name){
    this.name = name;
  }
}

//为 setName 函数创建一个间谍
var setNameSpy = sinon.spy(user, 'setName');

//现在,每当我们调用该函数时,间谍都会记录有关它的信息
user.setName('Darth Vader');

//我们可以通过查看间谍对象来查看
console.log(setNameSpy.callCount); //输出:1

//重要最后一步 - 删除间谍
setNameSpy.restore();
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

実際には、スパイを頻繁に使用することはできません。スタブが必要になる可能性が高いですが、コールバックが呼び出されることを確認するなど、スパイは便利です。

この例では、モカをテストフレームワークとして、チャイをアサーションライブラリとして使用します。これら2つについて詳しく知りたい場合は、以前の投稿:JavaScriptのMochaとChaiを使用したユニットテストを参照してください。

sinonの主張

スタブに進む前に、すぐに迂回して、シノンの主張を見てみましょう。

スパイ(およびスタブ)を使用するほとんどのテストケースでは、テストの結果を確認するための何らかの方法が必要です。

あらゆる種類のアサーションを使用して、結果を確認できます。コールバックに関する前の例では、チャイのアサート機能を使用しました。これにより、値が真の値であることが保証されます。

var spy = sinon.spy();

//我们可以像函数一样调用间谍
spy('Hello', 'World');

//现在我们可以获取有关调用的信息
console.log(spy.firstCall.args); //输出:['Hello', 'World']
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

これを行うことの欠点は、障害時のエラーメッセージが不明であることです。 「falseは真実ではない」などのプロンプトのみを受け取ります。ご想像のとおり、これは問題がどこにあるかを見つけるのにあまり役に立たず、テストのソースコードを調べてそれを理解する必要があります。面白くない。

この問題を解決するために、カスタムエラーメッセージをアサーションに含めることができます。

var user = {
  ...
  setName: function(name){
    this.name = name;
  }
}

//为 setName 函数创建一个间谍
var setNameSpy = sinon.spy(user, 'setName');

//现在,每当我们调用该函数时,间谍都会记录有关它的信息
user.setName('Darth Vader');

//我们可以通过查看间谍对象来查看
console.log(setNameSpy.callCount); //输出:1

//重要最后一步 - 删除间谍
setNameSpy.restore();
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
しかし、

独自の主張を使用できるのはなぜですか? このようなSinonの主張を使用すると、すぐにより良いエラーメッセージを提供できます。これは、関数のパラメーターなどのより複雑な条件を検証する必要がある場合に役立ちます。

function myFunction(condition, callback){
  if(condition){
    callback();
  }
}

describe('myFunction', function() {
  it('should call the callback function', function() {
    var callback = sinon.spy();

    myFunction(true, callback);

    assert(callback.calledOnce);
  });
});
ログイン後にコピー
ログイン後にコピー
以下は、シノンによって提供された他のいくつかの有用な主張です:

sinon.assert.callededを使用して、関数が特定のパラメーターで呼び出されたことを確認できます(これはおそらく私が最も使用するものです)

    sinon.assert.callorderは、関数が特定の順序で呼び出されていることを確認できます
  • スパイと同様に、Sinonのアサーション文書には利用可能なすべてのオプションが含まれています。 Chaiを使用したい場合は、Sinon-Chaiプラグインも利用できます。これにより、Chaiの期待またはインターフェイスを介してSinonアサーションを使用できます。
スタブ

スタブは、柔軟で便利なため、好ましいテストの代役です。彼らはスパイのすべての機能を持っていますが、それらは監視機能の役割以上のものであり、スタブはそれを完全に置き換えます。言い換えれば、Spyを使用する場合、元の関数はまだ実行されますが、スタブを使用する場合、実行されません。

これにより、以下などの多くのタスクにスタブが非常に適しています。

テストを遅くして書くのが困難になるajaxまたはその他の外部呼び出しを交換します

関数出力に従って異なるコードパスをトリガーします
    例外がスローされたときに何が起こるかなど、
  • テストの例外はありますか?
  • スタブを作成できる方法は、スパイのスタブと似ています...
スパイのような匿名のスタブを作成できますが、既存の関数をスタブに置き換えると、スタブは非常に便利になります。

たとえば、

jQueryのajax関数を使用するコードがある場合、テストすることは困難です。コードは、構成するサーバーにリクエストを送信するため、使用可能にする必要があります。または、テスト環境でそれを行わないようにコードに特別なケースを追加する必要があります。これは大きなタブーです。コードにテスト固有のケースをほとんど含める必要はありません。
assert(callback.calledOnce);
ログイン後にコピー

悪いプラクティスに目を向ける代わりに、Sinonを使用してAjax機能をスタブに置き換えることができます。これにより、テストが些細なことになります。

これは、テストするサンプル関数です。オブジェクトをパラメーターとして使用し、AJAXを介して事前定義されたURLに送信します。

var spy = sinon.spy();

//我们可以像函数一样调用间谍
spy('Hello', 'World');

//现在我们可以获取有关调用的信息
console.log(spy.firstCall.args); //输出:['Hello', 'World']
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

通常、これをテストすることは、AJAXコールと事前定義されたURLのために困難ですが、スタブを使用すると簡単になります。

リクエストが完了した後、SaveUserに渡されたコールバック関数が正しく呼び出されることを確認する必要があるとします。

var user = {
  ...
  setName: function(name){
    this.name = name;
  }
}

//为 setName 函数创建一个间谍
var setNameSpy = sinon.spy(user, 'setName');

//现在,每当我们调用该函数时,间谍都会记录有关它的信息
user.setName('Darth Vader');

//我们可以通过查看间谍对象来查看
console.log(setNameSpy.callCount); //输出:1

//重要最后一步 - 删除间谍
setNameSpy.restore();
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

ここでは、Ajax関数をスタブに置き換えます。これは、リクエストが送信されず、サーバーなどは必要ないことを意味します。テストコードで何が起こっているかを完全に制御できます。

SaveUserに渡すコールバックが呼び出されることを確認したいので、Stub ried に指示します。これは、スタブがパラメーターとして渡された最初の関数を自動的に呼び出すことを意味します。これにより、リクエストが完了した後にコールバックを呼び出す$ .POSTの動作がシミュレートされます。

スタブに加えて、このテストでスパイも作成しました。通常の関数をコールバックとして使用できますが、スパイを使用すると、SinonのSinon.assert.calledonceアサーションを使用してテストの結果を簡単に検証できます。

ほとんどの場合、スタブが必要な場合は、同じ基本パターンに従うことができます。

    $ .post
  • などの問題の関数を見つけます
  • それがどのように動作するかを見て、あなたがあなたのテストでそれをock笑することができる
  • スタブを作成します
  • スタブを設定して、テストで望ましい動作を持つように
スタブは各動作をシミュレートする必要はありません。テストに必要な唯一の動作が必要であり、他のすべては省略できます。

スタブのもう1つの一般的な使用法は、特定のパラメーターセットで関数が呼び出されていることを確認することです。

たとえば、AJAX関数の場合、正しい値が送信されることを確認する必要があります。したがって、次のようなものを持つことができます

同様に、$ .post()のスタブを作成しましたが、今回はそれを設定しませんでした。このテストはコールバックを気にしないので、それを降伏させる必要はありません。

function myFunction(condition, callback){
  if(condition){
    callback();
  }
}

describe('myFunction', function() {
  it('should call the callback function', function() {
    var callback = sinon.spy();

    myFunction(true, callback);

    assert(callback.calledOnce);
  });
});
ログイン後にコピー
ログイン後にコピー
予想されるデータ、つまりURLとパラメーターを含むようにいくつかの変数を設定しました。このような変数を設定することは、一目でテストの要件を確認できるため、良い習慣です。また、値を重複せずにユーザー変数を設定するのにも役立ちます。

今回は、sinon.assert.calledwith()アサーションを使用しました。スタブを正しいパラメーターで呼び出されていることを確認する必要があるため、スタブを最初のパラメーターとして渡します。

SinonでAJAXリクエストをテストする別の方法があります。これは、Sinonの偽のxmlhttprequest機能を使用して行われます。ここでは詳細は説明しませんが、それがどのように機能するかを理解したい場合は、Sinonの偽のxmlhttprequestを使用したAjaxテストに関する私の記事をご覧ください。

シミュレーション

シミュレーションは、スタブとは異なるアプローチです。 「シミュレートされたオブジェクト」という用語を聞いたことがある場合は、それは同じことです。Sinonのシミュレーションを使用して、オブジェクト全体を置き換えて、スタブ関数と同様に動作を変更できます。

単一のオブジェクトから複数の関数をスタブする必要がある場合、それらは主に有用です。単一の関数のみを交換する必要がある場合、スタブは使いやすくなります。

シミュレーションを使用するときは注意する必要があります!彼らの力のため、テストがあまりにも多く、あまりにも多くの具体的なものを具体的にするのは簡単であり、テストを誤って脆弱にする可能性があります。

スパイやスタブとは異なり、シミュレーションには組み込みのアサーションがあります。モックオブジェクトに何が起こる必要があるかを伝え、テストの最後に検証関数を呼び出すことにより、期待される結果を事前に定義できます。

store.jsを使用してコンテンツをLocalStorageに保存し、それに関連する関数をテストすると仮定します。シミュレーションを使用して、次のようにテストするのに役立ちます。

var spy = sinon.spy();

//我们可以像函数一样调用间谍
spy('Hello', 'World');

//现在我们可以获取有关调用的信息
console.log(spy.firstCall.args); //输出:['Hello', 'World']
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
シミュレーションを使用する場合、上記のように、スムーズな呼び出しスタイルを使用して、予想される呼び出しとその結果を定義します。これは、テスト結果を検証するためにアサーションを使用することと同じですが、それらを事前に定義し、それらを確認するために、テストの最後にstoremock.verify()を呼び出します。

を作成します。つまり、メソッドmock.something()は呼び出されると予想されます。各期待は、特定の関数をエミュレートすることに加えて、スパイやスタブと同じ機能をサポートします。

スタブの使用は通常、シミュレーションを使用するよりも簡単であることがわかります。まったく問題ありません。シミュレーションは注意して使用する必要があります。

シミュレートされた特定の関数の完全なリストについては、Sinonのシミュレーションドキュメントをご覧ください。

重要なベストプラクティス:sinon.test()

を使用します

sinonには、スパイ、スタブ、またはシミュレーションを使用する際に留意すべき重要なベストプラクティスがあります。

既存の関数をテストの代役に置き換える場合は、sinon.test()を使用します。

前の例では、stub.restore()またはmock.restore()を使用して、使用後に内容をクリーンアップします。それ以外の場合は、テストの代役が施行され、他のテストに悪影響を与えるか、エラーにつながる可能性があるため、これが必要です。

しかし、restore()関数を直接使用することは問題です。テストされている関数は、restore()を呼び出す前にエラーを引き起こし、テスト関数を終了する場合があります!

この問題を解決する2つの方法があります。コンテンツ全体をTry Catchブロックでラップできます。これにより、restore()コールを最終的にブロックに配置し、何が起こっても実行されることを確認できます。

または、より良い方法は、sinon.test()を使用してテスト機能をラップすることです

上記の例では、IT()の2番目のパラメーターはsinon.test()にラップされていることに注意してください。 2番目に注意すべきことは、sinon.stub()の代わりにthis.stub()を使用することです。

sandbox

関数を使用できます。およびシミュレーション。サンドボックスを使用して作成されたテストの順調には、

自動的に
var user = {
  ...
  setName: function(name){
    this.name = name;
  }
}

//为 setName 函数创建一个间谍
var setNameSpy = sinon.spy(user, 'setName');

//现在,每当我们调用该函数时,间谍都会记录有关它的信息
user.setName('Darth Vader');

//我们可以通过查看间谍对象来查看
console.log(setNameSpy.callCount); //输出:1

//重要最后一步 - 删除间谍
setNameSpy.restore();
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
クリーンアップされます。

上記の例のコードにはstub.restore()がないことに注意してください。テストがサンドボックス化されているため、不要です。

可能な場合は、sinon.test()を使用する場合、エラーのためにテストスタンドアロンをクリーンアップせずに、テストがランダムに失敗し始めた問題を回避できます。

sinonは魔法ではありません

Sinonは多くの操作を実行し、それがどのように機能するかを理解するのが難しい場合があります。 Sinonがどのように機能するかについての簡単なJavaScriptの例を見てみましょう。そうすれば、それが内部でどのように機能するかをよりよく理解できます。これは、さまざまな状況でより効率的に使用するのに役立ちます。

スパイ、スタブ、シミュレーションを手動で作成することもできます。 Sinonを使用する理由は、タスクを些細なものにすることです。手動で作成することは非常に複雑ですが、Sinonが何をするかを理解するためにどのように機能するかを見てみましょう。

まず、スパイは基本的に関数ラッパーです:

var spy = sinon.spy();

//我们可以像函数一样调用间谍
spy('Hello', 'World');

//现在我们可以获取有关调用的信息
console.log(spy.firstCall.args); //输出:['Hello', 'World']
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

カスタム関数を使用してSPY機能を簡単に取得できます。しかし、Sinonのスパイは、アサーションサポートを含む、より広範な機能を提供していることに注意してください。これにより、シノンはより便利になります。

スタブはどうですか?

非常にシンプルなスタブを作成するには、機能を新しい関数に置き換えることができます。

var user = {
  ...
  setName: function(name){
    this.name = name;
  }
}

//为 setName 函数创建一个间谍
var setNameSpy = sinon.spy(user, 'setName');

//现在,每当我们调用该函数时,间谍都会记录有关它的信息
user.setName('Darth Vader');

//我们可以通过查看间谍对象来查看
console.log(setNameSpy.callCount); //输出:1

//重要最后一步 - 删除间谍
setNameSpy.restore();
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
しかし、シノンのスタブにはいくつかの利点があります:

    フルスパイ機能
  • が含まれています
  • stub.restore()
  • を使用して元の動作を簡単に復元できます
  • Sinon Stubsに対して主張することができます
シミュレーションは、スパイとスタブの動作を単純に組み合わせて、機能をさまざまな方法で使用できるようにします。

Sinonは時々「魔法」がたくさんあるように見えますが、ほとんどの場合、これはあなた自身のコードで簡単に実行できます。シノンは、その目的のために独自のライブラリを書く必要があるのではなく、使用がはるかに便利です。

結論

実際のコードのテストは、複雑すぎるように見えることがあり、完全に簡単にgiveめることができます。しかし、Sinonでは、ほぼすべてのタイプのコードをテストすることが簡単になります。

主な原則を覚えておいてください:機能がテストの書き込みを困難にしている場合は、テストの代役に置き換えてみてください。この原則は、機能が何を実行しても適用されます。

独自のコードでシノンを適用する方法を知りたいですか?私のウェブサイトにアクセスしてください。シノンのベストプラクティスの3つの実際の例と、さまざまな種類のテスト状況でそれを適用する方法を含む無料の実世界のシノンガイドをお送りします。

Sinon.jsテスト(FAQ)

に関する FAQ

sinon.jsの模擬、スパイ、スタブの違いは何ですか?

Sinon.jsでは、模擬、スパイ、スタブの用途が異なります。スパイとは、パラメーターと呼ばれるすべてのパラメーター、返品値、この値、およびスローされた例外(ある場合)を記録する関数です。これらは、関数呼び出しと応答を追跡するために使用できます。スタブはスパイに似ていますが、事前にプログラムされた動作があります。また、それらがどのように呼ばれるかについての情報を記録しますが、スパイとは異なり、メソッドの動作を制御してメソッドを強制してエラーを投げたり、特定の値を返したりできます。シミュレーションは、事前にプログラムされた動作(スタブなど)と事前にプログラムされた期待(SPYなど)を備えた誤った方法です。

javascriptでの単体テストにsinon.jsを使用する方法は?

sinon.jsは、JavaScriptテストでスパイ、スタブ、モックを作成するための強力なツールです。それを使用するには、最初にHTMLでスクリプトタグを使用するか、NPM経由でインストールしてプロジェクトに含める必要があります。含まれると、APIを使用して、スパイ、スタブ、モックを作成および管理できます。これらを使用して、テストしているコードを分離し、予想どおりに機能することを確認できます。

sinon.jsでスパイを作成する方法は?

sinon.jsでスパイを作成するのは簡単です。 sinon.spy()関数を呼び出すだけです。これにより、テストで使用できるスパイ関数が返されます。 SPYはそれを呼び出す方法に関する情報を記録し、それをテストでチェックインすることができます。たとえば、スパイが何回呼び出されるか、それを呼び出すために使用されるパラメーター、およびそれが返すものを確認できます。

sinon.jsでスタブを作成する方法は?

Sinon.jsでスタブを作成するには、sinon.stub()関数を呼び出す必要があります。これにより、テストで使用できるスタブ関数が返されます。スタブはスパイのように振る舞い、それを呼び出す方法に関する情報を記録しますが、その動作を制御することもできます。たとえば、スタブをスローにエラーにするか、特定の値を返すことができます。

sinon.jsで模擬を作成する方法は?

sinon.jsで模擬の作成には、sinon.mock()関数を呼び出すことが含まれます。これにより、テストで使用できる模擬オブジェクトが返されます。模擬オブジェクトはスパイのように動作し、それを呼び出す方法に関する情報を記録し、スタブに似ているため、その動作を制御できます。しかし、それはあなたがそれをどのように呼ぶかについての期待を設定することを可能にします。

他のテストフレームワークでsinon.jsを使用する方法は?

sinon.jsは、JavaScriptテストフレームワークとともに使用するように設計されています。スタンドアロンテストフレームワークを提供しますが、Mocha、Jasmine、Qunitなどの他の一般的なテストフレームワークと統合することもできます。 Sinon.JSドキュメントは、これらおよびその他のテストフレームワークとの統合の例を提供します。

スタブまたはスパイを元の機能に復元する方法は?

関数をスタブまたはスパイに置き換えた場合、スタブまたはスパイの.Restore()メソッドを呼び出すことにより、元の関数を復元できます。これは、テスト後にクリーンアップして、スタブやスパイが他のテストに影響しないことを確認する場合に役立ちます。

特定のパラメーターでスパイが呼び出されたかどうかを確認する方法は?

sinon.jsは、スパイを呼び出す方法を確認するいくつかの方法を提供します。たとえば、.calledwith()メソッドを使用して、特定のパラメーターでスパイが呼び出されたかどうかを確認できます。 .calledoncewith()メソッドを使用して、特定のパラメーターでスパイが1回だけ呼び出されたかどうかを確認することもできます。

スタブを特定の値に返す方法は?

.returns()メソッドを使用して、スタブを特定の値に戻すことができます。たとえば、Mystubという名前のスタブがある場合は、mystub.returns( 'foo')を呼び出すことで値「foo」を返すことができます。

スタブをスローする方法はエラーですか?

.throws()メソッドを使用して、スタブをエラーにすることができます。たとえば、Mystubという名前のスタブがある場合は、mystub.throws()を呼び出すことでエラーを投げることができます。デフォルトでは、これによりエラーオブジェクトがスローされますが、エラーの名前をパラメーターとして渡すことにより、エラーを特定のタイプのエラーにすることもできます。

以上がSinonチュートリアル:模擬、スパイ、スタブを使用したJavaScriptテストの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート