我试图用笑话来模拟 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
永远不会被嘲笑。似乎以上方法都不起作用。请在这里需要帮助。
在 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')
}