2017-08-21 5 views
-3

マイコード:上記のコードでmochaテストのsinon.test()で `this`は何ですか?

it('should', sinon.test(function() { 
    console.log(this); // what `this` refer here? 
    ... 
})); 

thissinon.test()機能で参照してください?

は、私はそれをログに記録しようとしましたが、エラーました:

TypeError: Converting circular structure to JSON

Sinonバージョン:1.17.6

任意のコメントを歓迎します。ありがとう。

UPDATE

以下の答えを読んだ後、私はまだ混乱しています。なぜthis.myOnject.logが一度だけスタブされた場合、次の2つのコードが機能するのですか?

it('should', sinon.test(function() { 
    const stubLog = this.stub(this.myObject.log, 'warn'); 
    // ... 
    this.myObject.process(); 
    // expect codes... 
    })); 


    it('should', sinon.test(function() { 
    const stubLog = sinon.stub(this.myObject.log, 'warn'); 
    // ... 
    this.myObject.process(); 
    // expect codes... 
    })); 

UPDATE

downvoted場合、あなたはdownvotedなぜ私が知っているようにいくつかのコメントを残してください。私は投稿した質問で非常に混乱しています。しかし、私はなぜそんなに多くの人々が捨て去ったのか、何か有益なコメントを残さなかったのはもっと混乱しています。

答えて

0

sinon.testあなたのテストのための新しいSinon sandboxを作成し、はモカが自動的にあるサンドボックス上の対応するメソッドを呼び出すなどspystub、同様Sinon固有のメソッドを使用してテストに合格することを通常thisオブジェクトを強化作成した。オブジェクトを補強するという事実は、Mochaが通常提供するすべてのストックモチャメソッドをそのまま使用することが可能で、thisにあり、任意のフィールドに値を設定することができます。テストが終了すると、サンドボックスのメソッドrestoreが自動的に呼び出されます。 Sinonを使用して実行する共通オブジェクトの変更が他のテストに影響を与えないように、テスト間で分離を行うのが便利な方法です。

ここでは例です:

const sinon = require("sinon"); 

before(function() { 
    // We set "moo". 
    this.moo = "I'm a cow."; 
}); 

it("test", sinon.test(function() { 
    // We can access "stock" Mocha functions. 
    this.timeout(0); 

    // However, this is augmented with sinon functions. 
    const spy = this.spy(); 
    spy(); 

    // We can access "moo"; 
    console.log("value of moo", this.moo); 
})); 

これが生成します。

value of moo I'm a cow. 
    ✓ test 

    1 passing (34ms) 

上記のコードはSinon 1.xのを前提としていSinon 2.x以上でsinon.testはもはやSinonにバンドルされていませんが、それ自体は別のpackageです。

+0

ありがとうございました。 'sinon.stub()'と 'this.stub()'の違いは何ですか? – BAE

+0

違いは、 'sinon.test()'の 'this.stub()'はサンドボックスを使用していることです。 'sinon.stub()'を呼び出すだけでsanboxのメリットは得られませんし、必要なクリーンアップを自分で実行する必要があります。 – Louis

関連する問題