【发布时间】:2019-12-19 05:34:29
【问题描述】:
我在控制器中调用了两个函数,它们返回一个承诺,当我运行测试时,它以expected stub to be called once but was called 0 times. 失败,但是如果我从控制器中删除这些承诺函数,它就可以正常工作。
FileTransferController.js
const { getIncomingFiles, getOutgoingFiles } = require('../services')
const controller = {}
controller.getFileTransfers = async (req, res, next) => {
try {
const incoming = await getIncomingFiles()
const outgoing = await getOutgoingFiles()
return res.status(200).send({ incoming, outgoing })
} catch (err) {
return next(err)
}
}
module.exports = controller
FileTransferService.js
const service = {}
const { Job } = require('../models')
service.getIncomingFiles = () => new Promise(async (resolve, reject) => {
try {
const jobs = await Job.findAll({
where: {
job_name: 'Some Job Name',
},
})
resolve(jobs)
} catch (err) {
reject(err)
}
})
service.getOutgoingFiles = () => new Promise(async (resolve, reject) => {
try {
const jobs = await Job.findAll({
where: {
job_name: 'Some Job Name',
},
})
resolve(jobs)
} catch (err) {
reject(err)
}
})
module.exports = service
这是我的单元测试。根据我从其他类似的堆栈溢出问题中读到的内容,我已经尝试了这 10 种不同的方法,但似乎没有任何效果。我觉得我目前拥有的是最接近的。
我的单元测试
const sinon = require('sinon')
const proxyquire = require('proxyquire')
let sandbox
let FileTransferController
let FileTransferService
beforeEach(() => {
sandbox = sinon.createSandbox()
FileTransferService = {
getIncomingFiles: sandbox.stub().resolves([]),
getOutgoingFiles: sandbox.stub().resolves([]),
}
FileTransferController = proxyquire('../../../src/controllers/FileTransferController', {
'../services': FileTransferService,
})
})
afterEach(() => {
sandbox.restore()
})
describe('FileTransferController.js', () => {
describe('getFileTransfers()', () => {
let req
let res
beforeEach(() => {
req = {}
res = {
send: sandbox.stub(),
status: sandbox.stub().returns,
}
FileTransferController.getFileTransfers(req, res)
})
it('should only call send once', () => {
sinon.assert.calledOnce(res.send)
})
})
})
【问题讨论】:
标签: node.js promise async-await mocha.js sinon