gpt4 book ai didi

javascript - 使用 sinon 和 bluebird 对 Promisified 函数进行 Stub

转载 作者:IT老高 更新时间:2023-10-28 23:16:54 26 4
gpt4 key购买 nike

在我要测试的文件中,我有以下代码:

var httpGet = Promise.promisify(require("request").get);
httpGet(endpoint, {
auth: {bearer: req.body.access_token},
json: true
})
.then(...)

现在,在我的测试中,我想确保 httpGet 被调用一次,并确保参数有效。在被 promise 之前,我的测试是这样的:

beforeEach(function () {
request.get = sinon.stub()
.yields(null, null, {error: "test error", error_description: "fake google error."});
});

afterEach(function () {
expect(request.get).to.have.been.calledOnce();
var requestArgs = request.get.args[0];
var uri = requestArgs[0];

expect(uri).to.equal(endpoint);
//...
});

不幸的是,当 request.get 被 promise 时,这不再有效。我尝试使用 stub request.getAsync 代替(因为 bluebird 将“Async”附加到 promisified 函数),但这也不起作用。有什么想法吗?

最佳答案

Promise.promisify 没有修改对象,它只是接受一个函数并返回一个新函数,它甚至完全不知道该函数是否属于 "request"

"Async" 后缀的方法在使用promisify时添加到对象中All

Promise.promisifyAll(require("request"));

request.getAsync = sinon.stub()
.yields(null, null, {error: "test error", error_description: "fake google error."});

expect(request.getAsync).to.have.been.calledOnce();

关于javascript - 使用 sinon 和 bluebird 对 Promisified 函数进行 Stub,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28238074/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com