gpt4 book ai didi

class - Jest 用 typescript 模拟一个类(class)

转载 作者:搜寻专家 更新时间:2023-10-30 21:01:43 26 4
gpt4 key购买 nike

我正在尝试(使用 Jest)对使用摘要类的处理程序模块进行单元测试。

我原来的总结类是这样的:

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)
}

如果尝试自动模拟,我的结果取决于我的方法

jest.mock('./lib/Summary', () =>
{
return {
getSummary: jest.fn()
}
})

我得到了错误

TypeError: Summary_1.default is not a constructor

如果我在 lib/__mocks__/Summary.ts 下使用 jest.mock('./lib/Summary') 创建一个手动模拟,它会一直工作直到我得到重点

expect(Summary).toHaveBeenCalledTimes(1)

它提示我无法在总结时做到这一点。我也无法访问我的方法来测试它们是否以这种方式被调用。

注意:我的 hanlder 用于 lambda 函数,因此我无法以我已成功测试可以模拟注入(inject)类的方式注入(inject)类。

编辑

tsconfig.json 是:

{
"compilerOptions": {
"rootDir": "./src",
"outDir": "./build",
"declaration": false,
"target": "es2015",
"moduleResolution": "node",
"module": "commonjs",
"noImplicitReturns": true,
"noImplicitThis": true,
"strictNullChecks": true,
"alwaysStrict": true,
"lib": [
"dom",
"es2015.promise",
"es2017.object",
"es2016"
],
},
"include": [
"src/**/*.ts"
],
}

最佳答案

我不知道为什么会失败,但我似乎可以通过以下步骤修复它。

  1. 更改默认的类导出

来自

`export default class Summary {`

`class summary`

+ export = summary 最后

  1. 使用 import = require 导入它。

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

这两个更改使其能够找到 jest.mock。

关于class - Jest 用 typescript 模拟一个类(class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49686725/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com