내 NodeJS 응용 프로그램에서 request-promise-native를 사용합니다.NodeJS 단위 테스트를 위해 request-promise-native를 조롱하는 방법은 무엇입니까?
import request from 'request-promise-native'
const https = require('https')
const myRequest = request.defaults({
baseUrl: 'myBaseUrl',
agent: new https.Agent({ keepAlive: true })
})
async function findResults() {
const myResponse = await myRequest.get({
uri: '/myUri'
})
return myResponse
}
위의 단위 테스트 요청을 조롱하려고합니다. 하지만 여전히 실제 호출을하고 내 모의 객체 호출을 거치지 않고 결과를 얻습니다.
나는 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)
})
나는 또한 proxyquire 및 sinon의 가짜 서버의 변화를 시도
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)
})
(문서 https://www.npmjs.com/package/request-promise 당) 조롱 사용. 그러나 나는 그들에게 일하게 할 수 없었다.
제안 사항?
감사합니다. @ElioRubens. 나는 너의 제안에 약간의 변화를 보냈다. 테스트 파일에서 가져온 NodeJS 파일에서 myRequest를 내 보냅니다. 그 다음 그것을 찔렀다 : sinon.stub (myRequest, 'post'). returns (response). 그것은 작동합니다. – Canton
@Canton, 감사합니다. 도움이 될 수있어서 기쁩니다. 질문에 대답했다고 생각되면 받아 들인 대답으로 표시하는 것이 도움이 될 것입니다. – ElioRubens