La création de la demande de stub avec sinon à moka
Je suis en utilisant mocha
pour tester certaines classes et j'ai besoin de créer un talon de request
de la bibliothèque.
Je suis en utilisant sinon
, et je suis en mesure de créer un stub de la request.get
méthode, mais je ne suis pas en mesure de créer un stub de la request
méthode (l'appel http essayez de vous connecter à un serveur). Comme je l'ai lu, request.get
est un alias pour request
mais quand je stub request.get
il n'a pas d'effet sur request
appels.
Ce code fonctionne (à l'aide de request.get
):
Dans les 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'
Dans la source:
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
Mais cela ne fonctionne pas (essaie de se connecter à l'url fournie):
Dans les 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'
Dans la source:
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
Qui est la bonne façon de créer un stub pour request
appel? Qui est la méthode à stubed?
Vous devez vous connecter pour publier un commentaire.
Bien que
request
est une grande bibliothèque, il n'est pas un bon exemple de bien structuré API. Et parce que le modulerequest
est définie comme une fonction avec d'autres méthodes (de la même manière commeexpress
), que ce que je sais vous ne pouvez pas créer de stub pour fonctionrequest
avecsinon
.La meilleure chose que vous pouvez faire est d'éviter d'utiliser
request
fonction dans votre code et d'utiliser seulementrequest.get
,request.post
, etc., que vous pouvez facilement stub.La création de stub pour
Request
dans votre deuxième exemple n'aide pas parce que la Demande n'est pas une méthode, voir le code source.nock
au lieuSi quelqu'un est toujours à la recherche d'une réponse à cette question, il semble que vous pouvez créer un stub pour demander de l'aide sinon:
plus de détails peuvent être trouvés ici
Une autre solution serait de générer un tampon à l'aide de sinon du module et de la demande dépendance dans le module correspondant peut être substituée à l'aide de proxyquire.
Pour plus d'informations, consultez cet article sur les Tests Unitaires avec se moque du Nœud
Comme mentionné dans l'une des réponses à la question Comment se moquer de demande et de réponse en nodejs pour tester middleware/contrôleurs?, le node-se moque-http paquet fournit un moyen de construire la requête et la réponse se moque.