Sinon: 存根应该有一个`resolves'和`rejects`来设置承诺结果

创建于 2015-08-08  ·  13评论  ·  资料来源: sinonjs/sinon

这是非常简单的语法糖:

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!"));
Medium Feature Request Help wanted

最有用的评论

我可以在存根返回承诺的情况下执行sinon.stub().returnsArg(1)吗? 我试图将论点作为我的诺言的解决方案。 似乎不起作用。

所有13条评论

那将是一些不错的糖,谢谢您的建议@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分支中

此页面是否有帮助?
0 / 5 - 0 等级