Jasmineを使用したユニットテスト:testのspyon()では見られない()beforeeach()のコード

StackOverflow https://stackoverflow.com/questions/8825351

質問

一般的なユニットテスト、特にジャスミンは新しくなっています。

aで変数を設定しました beforeEach() コールバックですが、2番目のテストでは動作しないようです。その前に初期化を発射することになっています 毎日 そのコンテキスト内でテストしますよね?私は確かです spyOn() 呼び出しは責任がありますが、私はそれを修正する方法がわかりません。

コメントはパスを説明し、失敗します:

describe("Test suite for my library", function () {
  var html,
      body,
      play,
...

  // custom matcher...
  beforeEach(function () {
    this.addMatchers({
      toBeInstanceOf : function (constructr) {
        return this.actual instanceof constructr;
      });
    });
  });

  describe("Within the Button object", function () {

    beforeEach(function () {
      play = new Button("play", false);
    });

    describe("play", function () {

      // This test passes, as expected...
      it("should be an instance of the Button object", function () {
        expect(play).toBeInstanceOf(Button);
      });

    });

    describe("play.name", function () {

      // This test failed with the message
      // "Expected spy Button to have been called
      //  with [ 'play', false ] but it was never called."
      it("should be the first argument passed to the Button constructor", function () {
        spyOn(window, "Button");
        play = new Button("play", false); // ...until I added this line. Now it passes.
        expect(window.Button).toHaveBeenCalledWith("play", false);
      });

      // This test passes, even if the one above fails.
      it("should be 'play'", function () {
        expect(play.name).toBe("play");
      });

    });

  });
});

ドキュメンテーション の使用法を説明しますが、文脈ではなく説明します spyOn(), 、だから、バグを作成したのか、それとも無意識のうちに機能を利用しているのかはわかりません。

診断に違いがあると誰かが考えている場合は、コンストラクターを投稿できますが、それがシンプルであることを保証できます。

私は、私が難しい方法を学ばなければならないいくつかの基本的な単体テストの概念を使用した簡単な修正であると確信しています。前もって感謝します。

失敗した仕様でテストしていることは、私が説明したものではないことを理解しています。私はAPIガイドを介して自分の方法で取り組んでおり、関数呼び出し内で引数配列に到達する方法を探しているので、特定のテストを行うことができます arguments[0]. 。ヒントは高く評価されていますが、必要ではありません。私はそれを把握します。

役に立ちましたか?

解決

簡単な答え:いいえ、それぞれとスパイが互換性がない前に

スパイに電話について知りたい場合は、電話をかける前にスパイする必要があります。デフォルトの動作を妨害したくない場合は、Spyon(object、 'function')を使用できます。

長い答え:Faking/Mocking/Stubbing/Spying Frameworksがしばしば機能する方法は、呼び出している方法を、モッキングフレームワークが制御できる方法に置き換えることです。スパイに置き換える前に、その関数への呼び出しは観察できません。これは良いことですが、少し不便ですが、

他のヒント

その原因あなたがwindow.buttonに電話をかけた後。スパイが何をするかは完全にはわかりませんが、結局、スパイする関数を別の関数で変位させ、関数が呼び出され、何が渡されたのかを確認できます。テストを開始する前にボタンを作成するとき、オリジナル window.button 呼び出された関数。次に、関数をスパイに置き換え、スパイが呼び出されたテストであるため、テストが失敗する必要があります。

テスト自体にボタンを作成するか、スパイを作成する前にスパイを作成するかどうかのようです beforeEach 関数。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top