问题描述
好的,所以我有一个非常简单的 API,它基本上返回有关货币的信息。我正在尝试使用干净的代码方法,但我很难让这个测试工作。这是我到目前为止得到的(我使用 ** 包装主要语句):
这是控制器/getCurrency.js
const makeGetCurrency = ({ errorMessages,retrieveCurrency }) => {
return async function getCurrency(httpRequest,myCache) {
try {
const {
from,to,amount
} = httpRequest.query
const { ip,headers,source = {} } = httpRequest
source.ip = ip
source.browser = headers["User-Agent"]
if (headers["Referer"]) {
source.referer = headers["Referer"]
}
**const currencyConversion = await retrieveCurrency({ from,amount,myCache })**
return {
statusCode: 200,body: currencyConversion
}
}
catch (err) {
const { status,body } = errorMessages[err.message] || { status: 400,body: err.message }
return {
headers: {
"Content-Type": "application/json",},statusCode: status,body: {
error: body,}
}
}
}
}
那是我要测试的控制器。我需要嘲笑的是这个回报:
const currencyConversion = await retrieveCurrency
这个函数正在被另一个名为的父文件传递: 控制器/index.js
const makeGetHealth = require('./health')
const makeGetCurrency = require('./currency/getCurrency')
const errorMessages = require('../error-messages.json')
//use-cases
**const { retrieveCurrency } = require('../_use-cases')**
const getHealth = makeGetHealth()
const getCurrency = makeGetCurrency({ errorMessages,retrieveCurrency })
module.exports = {
getHealth,getCurrency,}
由于 retrieveCurrency
实际上是在 use-cases/index.js
上导出的,因此我正在尝试测试 API,如下所示:
const useCases = require('../../src/_use-cases')
describe("GET /currency ",() => {
let sandbox
beforeEach(() => {
sandbox = sinon.createSandbox()
})
//test a function for a specific case
it("returns status 200 ",async () => {
**const retrieveCurrencyStub = sandbox.stub(useCases,'retrieveCurrency').resolves({
test: 'test'
})**
const { statusCode,body } = await chai.request(createServer()).get('/conversion?from=USD&to=BRL&amount=10')
console.log(body) //not returning my stub's response
expect(statusCode).to.equal(200)
expect(retrieveCurrencyStub).to.be.called //is never called
})
我的路线就是这样设置的
const setUpRoutes = (myCache) => {
app.get('/health',expressCallBack(getHealth,myCache))
app.get('/conversion',expressCallBack(getConversion,myCache))
app.post('/currency',expressCallBack(postCurrency,myCache))
app.delete('/currency',expressCallBack(deleteCurrency,myCache))
return app
}
有人知道怎么做吗?
非常感谢
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)