我尝试编写一个单元测试,从@aws-sdk/s3-request-presigner包中存根getSignedUrl
函数,但是当我尝试使用sinon
存根函数时,收到错误:
- TypeError:属性getSignedUrl的描述符不可配置且不可写
const s3RequestSigner = require("@aws-sdk/s3-request-presigner");
const expect = require('chai').expect;
const sinon = require('sinon')
....
it('should throw an error when getSignedUrl rejects', async function() {
const sandbox = sinon.createSandbox();
sandbox.stub(s3RequestSigner, "getSignedUrl").rejects("fakeUrl");
sandbox.restore();
})
我正在使用node.js16,写javascript而不是typescribe。有没有办法模拟我的函数,我正在努力写我的测试呢?
3条答案
按热度按时间sshcrbum1#
对于ES6模块,我提出了以下解决方案:您可以将
getSignedUrl
封装在自己的模块中,然后模拟该模块,这种方法适用于sinon无法模拟"不可配置且不可写"方法的任何模块。例如:
kmpatx3s2#
所以我不会把这个作为官方答案,除非没有更好的解决方案,但这是我的研究带来的解决方案。
该问题与此相关:https://github.com/sinonjs/sinon/issues/2377
其中,当对象描述符不可配置时,sinon将抛出错误。
目前还没有明显的解决方法,我可以找到。解决它的方法是使用proxyquire:
这将解析为您想要的
fakeurl
。093gszye3#
另一种可能的解决方案是使用
mockery
,例如模拟uuid
嘲弄设置有点繁琐,但图书馆救了我很多次。