これは非常に単純な構文糖衣です。
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.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を見てみたいです
最も参考になるコメント
スタブがpromiseを返す
sinon.stub().returnsArg(1)
を実行できますか? 私は約束の解決策として議論を返そうとしています。 動作しないようです。