2017-10-25 1 views
0

So habe ich diese Methode, die ich testen wollen:Wie verwenden Sie SinonJS für Callback-Methoden?

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

Und ich versuche es so die getUserByID Methode liefert so einen Wert Stummel ich dies tun:

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(); 
    }); 
}); 

Das Problem ist, Der Code in der req.dbService.getUserByID wird nie aufgerufen, so dass ich die Logik nicht überprüfen kann, ob das "Ergebnis" gleich 5 ist oder nicht.

Wenn ich console.log (req.dbService.getUserByID()), die tatsächlich den Stubbed-Wert von 5 zurückgibt. Aber ich weiß nicht, wie es beim Rückruf funktioniert.

Wie mache ich es so, dass es in meinem Beispiel 5 zurückgibt (um dann den res.statusCode zu überprüfen)?

Vielen Dank im Voraus!

Antwort

2

Sieht so aus, als ob Ihre Funktion einen Callback erhält und diesen mit dem Ergebnis aufruft und das Ergebnis nicht als Stub zurückgibt.

Versuchen wie folgt aus:

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

Sie nicht callsFake() brauchen getUserByID tocall den Rückruf zu erhalten, so dass Sie, dass res.statusCode richtig eingestellt ist testen. Die sinon Funktion, die Sie hier haben möchten, ist stub.yields(), die speziell für diesen Zweck gemacht wird und den ersten Rückruf aufrufen wird, der an die Funktion mit Argumenten übergeben wird, die Sie bereitstellen.

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

Dies wird den Rückruf führen, dass Sie zu getUserByID passieren, werden ohne Fehler und einen Wert von 5 oder was auch immer Wert, den Sie testen möchten, aufgerufen werden.

+0

Letzte Sache, wenn meine Methode einen Parameter wie "req.dbService.getUserByID (req.body, ...)" wie req.body, wie würde ich diesen Parameter mit Sinon stub? Vielen Dank! Ich werde upvote. –