2016-12-14 1 views
1

スタブ当社のテストは、次のように編成されています。実行するとモカsinon.testに包まれたテストのスパイへのアクセスを失っている、モック、および

describe("description", sinon.test(function() { 
    const harness = this; 
    it("should do something", function() { 
     // do something with harness.spy, harness.mock, harness.stub 
    }); 
})); 

、これらのテストは、すべてのTypeError: harness.spy is not a functionで失敗しています。私はいくつかのログを追加して、が存在し、itに渡された関数が呼び出される前に関数であることがわかりましたが、itに渡された関数の内部でharness.spyundefinedです。

ここで何が起こっているかを理解する助けがあれば、大歓迎です。

答えて

1

問題は、モカがあなたのコードを実行する順序です。コールバックをdescribeに貼り付けてsinon.testにすることはできません。これは、すべてdescribeへのコールバックがの実行を終了し、のいずれかのテストがitのいずれかの実行を開始するためです。 sinon.test作品の方法は、それがサンドボックス(spystubなど)の方法のいくつかを使用して新しいサンドボックス、楽器thisを作成し、そのコールバックを呼び出し、そして、sinon.testthisからのコールバックのリターンを削除するときの方法ということを追加された

したがって、必ずsinon.testのコールバックを実行する設定は、いずれかのテストを実行する前に元に戻されます。ここに、私がconsole.logを入れた例があります。テストが実行される前にconsole.logステートメントが実行されています。

あなたはこのような、代わりに、あなたは itに渡すコールバックをラップする必要が
const sinon = require("sinon"); 

describe("description", sinon.test(function() { 
    const harness = this; 
    it("should do something", function() { 
    }); 

    console.log("end of describe"); 
})); 

console.log("outside"); 

sinon.testによって作成されたサンドボックスの寿命はあなたのために動作しない場合は、あなたが作成する必要が

const sinon = require("sinon"); 

describe("description", function() { 
    it("should do something", sinon.test(function() { 
     this.spy(); 
    })); 
}); 

console.log("outside"); 

あなたのサンドボックスを取り除き、 "手動で"このようにしてください:

const sinon = require("sinon"); 

describe("description", function() { 
    let sandbox; 
    before(function() { 
     sandbox = sinon.sandbox.create(); 
    }); 
    after(function() { 
     sandbox.restore(); 
    }); 
    it("should do something", function() { 
     sandbox.spy(); 
    }); 
    it("should do something else", function() { 
     // This uses the same sandbox as the previous test. 
     sandbox.spy(); 
    }); 
}); 
関連する問題