大佬教程收集整理的这篇文章主要介绍了node.js – 使用jest模拟aws-sdk S3#putObject实例方法,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
const S3 = require('aws-sdk/s3/clients') const s3 = new S3() s3.putObject(params,callBACk)
我添加了以下基于this article的模拟:
jest.mock('aws-sdk/s3/clients') const S3 = require('aws-sdk/s3/clients') it('has to mock S3#putObject',() => { S3.prototype.putObject.mockImplementation(() => cb()) })
但我找不到带有/不带模拟的S3.prototype.putObject,因为在apiLoader模式here期间api似乎是以不同的方式构建的.
但是,定义似乎完全不同here
我也尝试过:
const AWS = require('aws-sdk') console.log(AWs.S3.prototype.putObject) // undefined
在承诺中包装打破了结果
我已将源代码包装在Promise中,如下所示:
new Promise((resolve,reject) => { s3.putObject(params,(err,data) => { if (err) { reject(err) } else { resolve(data) } }) })
并使用如下所示的测试:
const mockedPutObject = jest.fn(); jest.mock('aws-sdk/s3/clients',() => { return class S3 { putObject(params,cb) { mockedPutObject(params,cb); } } }); it('should call aws S3.putObject method',async () => { const data = { Bucket: 'aaa',Key: 'bbb',Content: 'this can be anything',ACL: 'public-read' } await putObject(data) console.log(mockFn.calls) expect(mockFn).toBeCalledWith(data) })
导致错误的putObject> with params>应该调用aws S3.putObject方法
Timeout - Async callBACk was not invoked within the 5000ms timeout specified by jest.setTimeout.
const {promisify} = require('es6-promisify') const putS3Object = promisify(s3.putObject.bind(s3)) return putS3Object(data)
同样也失败了.
//src.js const S3 = require('aws-sdk/clients/s3'); const s3 = new S3(); const putFunction = () => { s3.putObject(params,callBACk); } export default putFunction;
const mockedPutObject = jest.fn(); jest.mock('aws-sdk/clients/s3',cb); } } }); it('has to mock S3#putObject',() => { const putFunc = require('./srC).default.putFunc; putFunc(); expect(mockedPutObject).toHaveBeenCalledWith(params,callBACk); })
以上是大佬教程为你收集整理的node.js – 使用jest模拟aws-sdk S3#putObject实例方法全部内容,希望文章能够帮你解决node.js – 使用jest模拟aws-sdk S3#putObject实例方法所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。