Frage

Ich benutze mocha Um einige Klassen zu testen, muss ich einen Stub davon erstellen request Bibliothek.

Ich benutze sinon, und ich kann einen Stub davon erstellen request.get Methode, aber ich kann keinen Stub davon erstellen request Methode (die http-Aufrufe versuchen, eine Verbindung zu einem Server herzustellen).Wie ich gelesen habe, request.get ist ein Alias ​​für request aber wenn ich stoße request.get es hat keine Auswirkung darüber request Anrufe.

Dieser Code funktioniert (mit request.get):

In Tests:

request = require 'request'

describe "User test", ->
  user = {}
  before (done) ->
    user = new test.user('Ander', 18)    
    sinon.stub(request, 'get').yields(null, {statusCode: 200}, 'foo')        
    done()
  after (done) ->
    request.get.restore()
    done()
  it "testing server response", ->
    user.getData().should.equal 'ander'

In der Quelle:

request = require 'request'

class User
  contructor(@name, @age): ->
  getData: ->
    mydata = ''
    request.get 'http://127.0.0.1:8080/', (err, response, body) ->        
      if not err and response.statusCode == 200
        mydata = body
      else
        err = throw new Error "Errorea"
    mydata

Dies funktioniert jedoch nicht (versucht, eine Verbindung zur angegebenen URL herzustellen):

In Tests:

request = require 'request'

describe "User test", ->
  user = {}
  before (done) ->
    user = new test.user('Ander', 18)    
    sinon.stub(request, 'Request').yields(null, {statusCode: 200}, 'foo')
    #Creating the stub this way, doesn't work neither
    #sinon.stub(request, 'get').yields(null, {statusCode: 200}, 'foo')
    done()
  after (done) ->
    request.Request.restore()
    done()
  it "testing server response", ->
    user.getData().should.equal 'ander'

In der Quelle:

request = require 'request'

class User
  contructor(@name, @age): ->
  getData: ->
    mydata = ''
    request 'http://127.0.0.1:8080/', (err, response, body) ->        
      if not err and response.statusCode == 200
        mydata = body
      else
        err = throw new Error "Errorea"
    mydata

Welches ist der richtige Weg, um einen Stub zu erstellen? request Anruf?Mit welcher Methode soll gestubt werden?

War es hilfreich?

Lösung

Obwohl request ist eine großartige Bibliothek, aber kein gutes Beispiel für eine gut strukturierte API.Und weil Modul request ist als Funktion mit zusätzlichen Methoden definiert (ähnlich wie express), da Sie meines Wissens keinen Stub für eine Funktion erstellen können request mit sinon.

Das Beste, was Sie tun können, ist, die Verwendung zu vermeiden request Funktion in Ihrem Code und nur zur Verwendung request.get, request.post, usw., die Sie leicht löschen können.

Stub erstellen für Request in Ihrem zweiten Beispiel hilft das nicht, weil Request keine Methode ist, siehe Quellcode.

Andere Tipps

Wenn jemand immer noch nach einer Antwort sucht, sieht es aus, als könnten Sie einen Stub für Anforderung mit SINON erstellen:

generasacodicetagpre.

Weitere Details finden Sie in hier

Eine andere Problemumgehung würde einen Stub mit sinon module erstellen und die anforderung abhängigkeit im entsprechenden Modul kann mit proxyquire überschrieben werden.

generasacodicetagpre.

Weitere Informationen finden Sie unter Dieser Artikel über Untertests mit Mocks in Knoten

in einer der Antworten auf die Frage Wie schütteln Sie die Anforderung und Antwort in Nodejs, um Middleware / Controller zu testen? , das Paket -Knoten-Mocks-http bietet einen Weg, um Anforderungs- und Antwortspott zu erstellen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top