[英]Mocking a class in typescript with jest
我正在嘗試單元測試(使用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不是構造函數
如果我使用jest.mock('./lib/Summary')
在lib/__mocks__/Summary.ts
jest.mock('./lib/Summary')
下創建一個手動模擬,它確實有效,直到我明白了
expect(Summary).toHaveBeenCalledTimes(1)
哪里抱怨我無法在總結中做到這一點。 我也無法訪問我的方法來測試它們是以這種方式調用的。
注意:我的hanlder用於lambda函數,因此我無法以成功測試的方式注入類,我可以模擬注入的類。
編輯
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"
],
}
我不知道為什么會失敗,但我以下步驟似乎正在努力解決它。
從
`export default class Summary {`
至
`class summary`
+ export = summary
結尾
使用import = require導入它。
import Summary = require('./lib/Summary')
這兩個更改允許它找到jest.mock。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.