2017-10-25 3 views
0

だから私は、私がテストしたいこの方法がありますので、私はこれを行うSinonJSをコールバックメソッドにどのように使用しますか?

app.get('/test', exposeDb, function(req, res) { 
    req.dbService.getUserByID(function(err, result) { 
     if (result == 5) { 
      res.statusCode = 200; 
     } 
     else { 
      res.statusCode = 500;    
     } 
    }); 
}); 

をそして、私はgetUserByIDメソッドが値を返すので、それをスタブしようとしている:

describe('Test', function() { 
    beforeEach(function() { 
     var getUserByIDStubE = sinon.stub(dbService, 'getUserByID').callsFake(() => { 
      return 5; 
     }); 
     }); 

    it('TESTSETSTETS', function(done) {   
     chai.request(server) 
      .get('/test') 
      .send({}) 
      .end(function (err, res) { 
       res.should.have.status(200); 
      }); 
      done(); 
    }); 
}); 

問題があり、 req.dbService.getUserByID内のコードは呼び出されないので、「結果」が5に等しいかどうかのロジックをチェックすることはできません。

私がconsole.log(req.dbService.getUserByID())を実行すると、実際にスタブされた値5が返されます。しかし、コールバックの仕組みは分かりません。

私はどのようにして私の例で5を返すようにしますか?(res.statusCodeをチェックします)

ありがとうございます!

答えて

2

関数のように、コールバックを取得して結果を呼び出して、スタブとして結果を返さないようです。

は次のように試してみてください:

sinon.stub(dbService, 'getUserByID').callsFake(cb => { 
    cb(undefined, 5); 
}); 
1

あなたはres.statusCodeが正しく設定されていることをテストできるように、コールバックtocall getUserByIDを取得するcallsFake()は必要ありません。あなたがここで必要とするsinon関数は、この目的のために特別に作られたstub.yields()であり、あなたが提供する引数を持つ関数に渡される最初のコールバックを呼び出します。

var getUserByIDStubE = sinon.stub(dbService, 'getUserByID').yields([null, 5]); 

これは、あなたがエラーと5または任意の値テストしたいの値なしで呼ばれるようにgetUserByIDに渡しているコールバックが発生します。

+0

最後に、私のメソッドがreq.bodyなどの "req.dbService.getUserByID(req.body、...)"などのパラメータを取る場合、このパラメータをSinonでどのようにスタブするのですか? ありがとうございます!私はupvoteします。 –

関連する問題