我正在尝试使用Jest对我的处理程序模块进行单元测试(使用Jest)。
我的原始摘要课程如下:
ffmpeg -i input.mp3 -filter_complex \ "[0:a]aformat=channel_layouts=mono,compand=gain=-6, \
showwavespic=s=600x120:colors=white,negate[a]; \
color=red:600x120[c]; \
[c][a]alphamerge" -vframes 1 output.png
在我的处理程序模块中,我使用import DynamoDBClient from './ddbClient/DynamoDBClient'
import { DynamoDB } from 'aws-sdk'
import { iSummaryReader, iObsSummariesAttributes } from './Summary.d'
import { JSONAPIResource } from '../JSONAPIResponse'
export default class Summary {
reader: iSummaryReader
constructor(reader: iSummaryReader) {
this.reader = reader
}
getSummary = async (keyName: string, keyValue: string): Promise<JSONAPIResource<iObsSummariesAttributes>> => {
return new Promise<JSONAPIResource<iObsSummariesAttributes>>((resolve, reject) => {
const gettingItem = this.reader.getItem(keyName, keyValue)
console.log(gettingItem)
gettingItem.then((resp) => {
resolve(resp)
}).catch((err: Error) => {
reject(err.message)
})
})
}
}
导入
(注意:import Summary from './lib/Summary'
处理程序函数内部
handler.test.ts
如果尝试自动模拟,我的结果取决于我的方法
try {
const dynamodbObj: iSummaryReader = new DynamoDBClient(documentClient, someTable)
const summary = new Summary(dynamodbObj)
const data: JSONAPIResource<iObsSummariesAttributes> = await summary.getSummary('id', someID)
}
我收到错误
TypeError:Summary_1.default不是构造函数
如果我使用jest.mock('./lib/Summary', () =>
{
return {
getSummary: jest.fn()
}
})
在lib/__mocks__/Summary.ts
下创建手动模拟,它确实有效,直到我明白为止
jest.mock('./lib/Summary')
抱怨我无法在摘要中做到这一点。我也无法访问我的方法来测试它们是以这种方式调用的。
注意:我的hanlder用于lambda函数,因此我无法以成功测试的方式注入类,我可以模拟注入的类。
修改
tsconfig.json是:
expect(Summary).toHaveBeenCalledTimes(1)
答案 0 :(得分:0)
我不知道为什么会失败,但我以下步骤似乎可以解决它。
这
`export default class Summary {`
到
`class summary`
最后 + export = summary
使用import = require导入它。
import Summary = require('./lib/Summary')
这两个更改允许它找到jest.mock。