我的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
}
我想模拟'获取'上述单元测试请求。但它仍然会实际调用并获得结果,而不会通过我的模拟对象调用。
我尝试了不同的变化,使用兴农:
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)
})
使用嘲弄(每文档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)
})
我自己也尝试proxyquire和兴农的假服务器的变化。但我无法让他们工作。
有什么建议吗?
谢谢@ElioRubens。我对你的建议做了一些改动。从导入到测试文件中的NodeJS文件导出myRequest。然后stubbed:sinon.stub(myRequest,'post')。returns(response)。有用。 – Canton
@Canton,谢谢,很高兴它可能会有所帮助。如果您觉得它回答了这个问题,将其标记为接受的答案会很有帮助。 – ElioRubens