所以有人问了这个问题,这里有一个答案: Is it possible to use TypeScript with 'aws-sdk-mock'
我没有足够的声誉来询问答案,所以我不得不创建另一个问题,因为我无法得到答案。
这是我的全部测试代码:
const AWSMock = require('aws-sdk-mock');
const AWS = require('aws-sdk');
AWSMock.setSDKInstance(AWS);
AWSMock.mock('DynamoDB', 'putItem', function (params, callback) {
console.log('MOCK WORKS!')
});
const ddb = new AWS.DynamoDB();
ddb.putItem(null, function(err, data) {
console.log('NOT MOCKED!')
});
AWSMock.restore();
版本:
aws-sdk: 2.286.2
aws-sdk-模拟:4.0.0
测试框架:mocha 3.4.2
有什么想法吗?谢谢!
最佳答案
我遇到了同样的问题,最终解决方案很简单:我使用了错误的 AWS
实例。
在我看到的示例中,它们都在测试文件中创建了一个新的 AWS
实例,但对我有用的是使用源代码中的相同 AWS
实例我想测试的。
来源.ts
export const aws = require('aws-sdk')
export async function myFunction(bucket: string): Promise<string> {
const params: any = { Bucket: bucket }
const s3 = new aws.S3()
s3.listObjects(params, (err: any, data: any) => {
// ...
})
}
源代码.test.ts
import * as AWSMock from "aws-sdk-mock"
import {aws, myFunction} from "source.ts"
describe("myFunction", () => {
it("should be mocked", async () => {
AWSMock.setSDKInstance(aws)
AWSMock.mock('S3', 'listObjects', (params: any, callback: Function) => {
callback(null, {Contents: [{Key: 'file1.csv'}]})
})
// ...
AWSMock.restore()
})
})
请注意,params
的类型不必是 aws-sdk
类型定义中的实际类型。 any
对我有用。
此外,就像其他答案所说的那样,您需要在您正在测试的函数内初始化 AWS 服务 ( source )
关于typescript - 将 TypeScript 与 'aws-sdk-mock' 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51678615/