簡體   English   中英

用jest模擬打字稿中的類

[英]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"
  ],
}

我不知道為什么會失敗,但我以下步驟似乎正在努力解決它。

  1. 將類導出更改為默認值

`export default class Summary {`

`class summary`

+ export = summary結尾

  1. 使用import = require導入它。

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

這兩個更改允許它找到jest.mock。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM