这是非常简单的语法糖:
var stub = sinon.stub();
stub.resolves("hello");
//is the same as
stub.returns(Promise.resolve("hello"));
stub.rejects(new Error("oh noes!"));
//is the same as
stub.returns(Promise.reject(new Error("oh noes!"));
那将是一些不错的糖,谢谢您的建议@mariusGundersen
我们的团队在npm上有一个小图书馆,它一直在帮助我们解决这类问题-https: //github.com/substantial/sinon-stub-promise-尽管目前实现的方式需要存根语法,例如: sinon.stub().returnsPromise()
。 有什么想法吗? 从上面的示例看来,这假设是同步评估,对吗?
我真的很喜欢@mariusGundersen的建议。 据我所知,所有的Promise库一直都是异步的,对不对? 如果是这样,我认为存根承诺应该反映这种行为。
我只是想知道它会使用全局可用的Promise.resolve
,如果存在的话,否则不起作用。 但是让它使用then
方法返回一个对象是一个更好的解决方案:
var stub = sinon.stub();
stub.resolves("hello");
//is the same as
stub.returns({then: x => setTimeout(() => x("hello"), 0)});
stub.rejects(new Error("oh noes!"));
//is the same as
stub.returns({then: x => undefined, catch: x => setTimeout(() => x(new Error("oh noes!")), 0)});
(写在电话上,可能有错误)
我们的团队写了一个小库来提供类似的功能。 也许这会有所帮助。 它使用bluebird库来实现承诺。 https://www.npmjs.com/package/sinon-bluebird
+1支持本地Promise
还有一个名为sinon-as-promised的项目,该项目使用仅本机承诺来修补项目的现有sinon模块,以向存根添加解析/拒绝语义。
如果可以将此或其他模块之一的更改添加到sinon本身,将是王牌。
我可以在存根返回承诺的情况下执行sinon.stub().returnsArg(1)
吗? 我试图将论点作为我的诺言的解决方案。 似乎不起作用。
@jnystrom使用问题属于邮件列表,但这不是sinon当前支持的语法糖。 也许您可以建议一种语法? 这样的事情应该可以做您想要的,而您不需要sinon。
stub = (arg) => Promise.resolve(arg);
从这里相同:#738
大家好,首先,感谢你们在Sinon上所做的出色工作。
如果您想实施此方法,我也很乐意试一试,请告诉我,我将开始在PR上工作。
@lucasfcosta ,谢谢。 我认为@mroderick很久以前就谈论过将sinon-as-promised
集成到Sinon中,不是吗? 那将是最简单的解决方案,我没有反对意见。
@lucasfcosta我很想看到PR将sinon-as-promised
集成到Sinon的master
分支中
最有用的评论
我可以在存根返回承诺的情况下执行
sinon.stub().returnsArg(1)
吗? 我试图将论点作为我的诺言的解决方案。 似乎不起作用。