1. ホーム
  2. node.js

[解決済み] Sinon エラー 既にラップされている関数をラップしようとした

2022-09-04 20:41:41

質問

同じような質問があるようですが、私の問題に対する答えが見つからなかったので、ここで質問します。

私はmochaとchaiを使用して私のnode jsアプリをテストしています。私は私の関数をラップするためにsinionを使用しています。

describe('App Functions', function(){

  let mockObj = sinon.stub(testApp, 'getObj', (dbUrl) => {
     //some stuff
  });
  it('get results',function(done) {
     testApp.someFun
  });
}

describe('App Errors', function(){

  let mockObj = sinon.stub(testApp, 'getObj', (dbUrl) => {
     //some stuff
  });
  it('throws errors',function(done) {
     testApp.someFun
  });
}

このテストを実行しようとすると、エラーが発生します。

Attempted to wrap getObj which is already wrapped

また

beforeEach(function () {
  sandbox = sinon.sandbox.create();
});

afterEach(function () {
  sandbox.restore();
});

をそれぞれ記述しても、同じエラーが発生します。

どのように解決するのですか?

を復元する必要があります。 getObjafter() という関数がありますので、以下のように試してみてください。

describe('App Functions', function(){
    var mockObj;
    before(function () {
            mockObj = sinon.stub(testApp, 'getObj', () => {
                 console.log('this is sinon test 1111');
            });
    });

    after(function () {
        testApp.getObj.restore(); // Unwraps the spy
    });

    it('get results',function(done) {
        testApp.getObj();
    });
});

describe('App Errors', function(){
    var mockObj;
    before(function () {
            mockObj = sinon.stub(testApp, 'getObj', () => {
                 console.log('this is sinon test 1111');
            });
    });

    after( function () {
        testApp.getObj.restore(); // Unwraps the spy
    });

    it('throws errors',function(done) {
         testApp.getObj();
    });
});

2022年1月22日更新

使用方法 シノンのサンボックス を使えば、スタブモックを sandbox.stub() で作成したモックを復元し sandbox.restore() Arjun Malikは良いを与える