无法使用 jest 模拟 npm 模块“@aws-sdk/cloudfront-signer”的 getSignedUrl

问题描述 投票:0回答:1

我试图用笑话来模拟 npm 模块“@aws-sdk/cloudfront-signer”的功能

getSignedUrl

这是实现:

import { getSignedUrl } from '@aws-sdk/cloudfront-signer'
let url = 'test value', // confidential
keyPairId = 'test value',  // confidential
dateLessThan = 'test value',
privateKey = 'test value'; // confidential

const signedUrl = getSignedUrl({
  url,
  keyPairId,
  dateLessThan,
  privateKey,
})

这就是我试图嘲笑它的方式:

jest.mock('@aws-sdk/cloudfront-signer', () => {
  return {
    getSignedUrl: jest.fn(() => 'test'),
  }
})

另一种方法:

jest.mock('@aws-sdk/cloudfront-signer', () => ({
  getSignedUrl: jest.fn(() => {
    console.log('test mock')
    return 'test'
  }),
}))

另一种方法:

jest
  .spyOn(cloudfrontSigner, 'getSignedUrl')
  .mockImplementation(() => 'test url')

另一种方法:

import * as cloudfrontSigner from '@aws-sdk/cloudfront-signer'

Object.defineProperty(cloudfrontSigner, {
  getSignedUrl: jest.fn(),
})

另一种方法:

import * as cloudfrontSigner from '@aws-sdk/cloudfront-signer'

cloudfrontSigner.getSignedUrl = jest.fn()

另外,我尝试了另一个名为

rewire

的模块
import rewire from 'rewire'
const mockGetSignedUrl = jest.fn()
mockGetSignedUrl.mockReturnValue('test url')

cloudfrontSignerRewired.__set__('getSignedUrl', mockGetSignedUrl)

尝试实施

aws-sdk-mock

import AWS from 'aws-sdk-mock'
AWS.mock('CloudFront.Signer', 'getSignedUrl', 'zameer test')

AWS.mock('CloudFront.Signer', 'getSignedUrl', function (params, callback) {
  console.log('test test 123')
  callback(null, { Item: { Key: 'Value' } })
})

另一种方法:

jest.mock('@aws-sdk/cloudfront-signer', () => {
  const cloudfrontSigner = jest.requireActual('@aws-sdk/cloudfront-signer');

  return {
    __esModule: true,
    ...cloudfrontSigner,
    getSignedUrl: jest.mockImplementation(()=> {
      console.log("this is mock")
      return 'test url'}),
  };
});

另一种方法:

import * as cloudfrontSigner from '@aws-sdk/cloudfront-signer'

cloudfrontSigner.getSignedUrl.mockImplementation(()=>'test')

使用间谍:

import * as cloudfrontSigner from '@aws-sdk/cloudfront-signer'

const getSignedUrlSpy = jest.spyOn(cloudfrontSigner, 'getSignedUrl').mockReturnValueOnce('test');

当我执行测试用例时,

getSignedUrl
永远不会被嘲笑。似乎以上方法都不起作用。请在这里需要帮助。

javascript node.js amazon-web-services amazon-cloudfront
1个回答
0
投票

在 jest 配置中添加模块映射,如下所示:

"moduleNameMapper": {
  "@aws-sdk/cloudfront-signer": "<rootDir>/tests/_mocks_/getSignedUrl",
},

添加一个带有虚拟函数的文件

<rootDir>/tests/_mocks_/getSignedUrl.mjs

export function getSignedUrl(params) {
  console.log('Calling from mocked getSignedUrl')
}
© www.soinside.com 2019 - 2024. All rights reserved.