vam*_*olu 9 amazon-dynamodb typescript jestjs aws-sdk-nodejs ts-jest
我有一个如下所示的函数:
function connect() {
const secret = 'secret';
const key = 'key';
const region = 'region';
const client = new AWS.DynamoDB({
secret,
key,
region
});'
return new AWS.DynamoDB.DocumentClient({ service: client })
}
Run Code Online (Sandbox Code Playgroud)
我想测试一下连接功能。我像这样嘲笑了 DynamoDB 构造函数:
// See /sf/ask/3332458181/
jest.mock('aws-sdk', () => {
const DynamoDB = jest.fn().mockImplementation(() => {
return {};
});
return {
DynamoDB,
};
});
Run Code Online (Sandbox Code Playgroud)
然而,这意味着DocumentClient构造函数失败。我又该如何嘲笑呢?
dpm*_*ott 10
基于上面 duxtinto 的评论:
就我而言(如果我没读错的话,就 OP 而言),DynamoDB 不是作为函数调用的,而是一个带有 DocumentClient 字段的对象,所以这对我有用:
jest.mock('aws-sdk', () => {
return {
DynamoDB: { // just an object, not a function
DocumentClient: jest.fn(() => ({
put: mockDynamoDbPut
}))
}
}});
Run Code Online (Sandbox Code Playgroud)
小智 7
这对我有用:
const mockDynamoDbPut = jest.fn().mockImplementation(() => {
return {
promise() {
return Promise.resolve({});
}
};
});
jest.doMock('aws-sdk', () => {
return {
DynamoDB: jest.fn(() => ({
DocumentClient: jest.fn(() => ({
put: mockDynamoDbPut
}))
}))
};
});
Run Code Online (Sandbox Code Playgroud)
我希望它对你也有帮助。
问候,
大卫。
DocumentClient可能会调用某些client方法,因此只需定义这些方法存根即可。例如,在您的代码中DocumentClient使用,batchGetItem
import AWS from 'aws-sdk';
jest.mock('aws-sdk', () => {
const DynamoDB = jest.fn().mockImplementation(() => {
return {
batchGetItem: jest.fn(),
};
});
return {
DynamoDB,
};
});
// you could inspect the mock
console.log(new AWS.DynamoDB({ ... }));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22451 次 |
| 最近记录: |