使用 Express 在 Node 中编写单元测试时存根不起作用

问题描述

好的,所以我有一个非常简单的 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 (将#修改为@)