Sinon: スタブには、promiseの結果を設定するための `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

最も参考になるコメント

スタブがpromiseを返すsinon.stub().returnsArg(1)を実行できますか? 私は約束の解決策として議論を返そうとしています。 動作しないようです。

全てのコメント13件

それはいくつかの素晴らしい砂糖になるでしょう、提案をありがとう@mariusGundersen

私たちのチームはnpmに小さなライブラリを持っており、この種のことを支援してくれています-https ://github.com/substantial/sinon-stub-promise-現在の実装方法では、次のようなスタブ構文が必要です: sinon.stub().returnsPromise() 。 考え? 上記の例から、これは同期評価を想定しているように見えますよね?

@mariusGundersenの提案が本当に好き

グローバルに利用可能な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

ネイティブPromiseサポートの+1

また、 sinon-as-promisedというプロジェクトもあります。これは、 native-promise-onlyを使用してプロジェクトの既存のsinonモジュールにパッチを適用し、解決/拒否のセマンティクスをスタブに追加します。

これまたは他のモジュールの1つからの変更をsinon自体に追加できればエースになります。

スタブがpromiseを返すsinon.stub().returnsArg(1)を実行できますか? 私は約束の解決策として議論を返そうとしています。 動作しないようです。

@jnystromの使用法に関する質問はメーリングリストに含まれていますが、これは

stub = (arg) => Promise.resolve(arg);

ここから同じ:#738

みなさん、こんにちは。まず、皆さんがSinonで行ってきた素晴らしい仕事に感謝します。
これを実装したい場合は、ぜひ試してみてください。お知らせください。そのためのPRに取り組みます。

@lucasfcosta 、ありがとう。 @mroderickは、 sinon-as-promisedをSinonに統合することについてずっと前に話していたと思いますが、そうではありませんか? それが最も簡単な解決策であり、私は異議を唱えません。

@lucasfcosta sinon-as-promisedをSinonのmasterブランチに統合するPRを見てみたいです

このページは役に立ちましたか?
0 / 5 - 0 評価