Mon application NodeJS utilise request-promise-native. J'essaie de me moquer de la demande de tests unitaires ci-dessus. Mais il fait toujours l'appel réel et obtient les résultats, ne passant pas par mon appel d'objet simulé.Comment se moquer de request-promise-native pour les tests unitaires NodeJS?
J'ai essayé différentes variantes, en utilisant Sinon:
import test from 'ava'
import sinon from 'sinon'
import Bluebird from 'bluebird'
import request from 'request-promise-native'
import { findResults } from '../services/results'
test.only(async t => {
let response = JSON.stringify({
statusCode: 504
})
sinon.stub(request, 'get').returns(Bluebird.resolve(response))
const returnValue = await findResults()
console.log('return: ', returnValue)
t.is (1, 1)
})
En utilisant Moquerie (par la documentation https://www.npmjs.com/package/request-promise)
import mockery from 'mockery'
import { findResults } from '../services/results'
test.before(async t => {
mockery.enable({
warnOnReplace: false,
warnOnUnregistered: false,
useCleanCache: true
})
mockery.registerMock('request-promise-native', function() {
// var response = fs.readFileSync(__dirname + '/data/' + filename, 'utf8');
let response = JSON.stringify({
statusCode: 9
})
return Bluebird.resolve(response.trim());
})
})
test.after(async t => {
mockery.disable()
mockery.deregisterAll()
// done()
})
test.only(async t => {
const returnValue = await findResults()
console.log('return: ', returnValue)
t.is(1, 1)
})
J'ai aussi essayé des variations de proxyquire et faux serveur de sinon. Mais je ne pouvais pas les faire travailler.
Des suggestions?
Merci @ElioRubens. J'ai fait une légère variation à votre suggestion. Exporter myRequest du fichier NodeJS, importé dans le fichier de test. Puis l'a écrasé: sinon.stub (myRequest, 'post'). Renvoie (réponse). Ça marche. – Canton
@Canton, merci, heureux qu'il pourrait être utile. Si vous pensez que cela a répondu à la question, il serait utile de la marquer comme la réponse acceptée. – ElioRubens