用jest模拟打字稿中的类

时间:2018-04-06 06:31:16

标签: class typescript mocking jest

我正在尝试使用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)

1 个答案:

答案 0 :(得分:0)

我不知道为什么会失败,但我以下步骤似乎可以解决它。

  1. 更改默认类导出
  2. `export default class Summary {`
    

    `class summary`
    
    最后

    + export = summary

    1. 使用import = require导入它。

      import Summary = require('./lib/Summary')

    2. 这两个更改允许它找到jest.mock。